What are the minimum requirements to get a job in?
Cameron Simpson
cs at zip.com.au
Fri Dec 14 21:19:54 EST 2012
On 14Dec2012 16:57, Dennis Lee Bieber <wlfraed at ix.netcom.com> wrote:
| On Fri, 14 Dec 2012 12:42:27 +0100, Christian Heimes
| <christian at python.org> declaimed the following in
| gmane.comp.python.general:
| >
| > To be fair, memcpy() is a pretty simple function. It can be implemented
| > in just about two lines of C code plus five lines of boiler plate. It
| > shows, if you have very basic understanding about memory layout and
| > pointer arithmetics.
| >
| > You have to translate something like
| >
| > def memcpy(dest, src, n):
| > for i in xrange(n):
| > dest[i] = src[i]
| >
| > into C code. Here is a rather nonperformance solution. It copies just
| > one byte per cycle. A better implementation could copy 4 or 8 bytes at
| > once and handle the tail in a switch statement.
| >
| > void *memcpy(void *dest, const void *src, size_t n)
| > {
| > char *destptr = (char*)dest;
| > char *srcptr = (char*)src;
| > while (n--) {
| > *destptr++ = *srcptr++;
| > }
| > return dest;
| > }
| >
| > destptr and srcptr are the memory addresses of a byte (char). *destptr
| > is the value at a specific memory location. The code in the loop copies
| > the value at address srcptr to the location at destptr and then moves
| > both pointers one step to the right (++). That's all. ;)
|
| That is ignoring the possibility of overlapping source/destination
| ranges (in which one may need to copy from the end rather than the
| start).
If you're going to be picky, memcpy() is not required to allow for that.
That allows a high speed implementation. memmove() exists to cover the
more general case.
--
Cameron Simpson <cs at zip.com.au>
NOTWORK: n. A network when it is acting flaky. Origin (?) IBM.
- Hackers' Dictionary
More information about the Python-list
mailing list