Am Sun, 30 Jun 2013 07:07:23 -0400
schrieb "Tyro[17]" <rid...@yahoo.com>:

> What is the equivalent of memcpy
> 
> module memcopy;
> 
> immutable ADDRESS_BUS_SIZE = 20; // 2^20 address bus
> byte memory[1 << ADDRESS_BUS_SIZE];
> 
> void main()
> {
>       ushort val = 12345;
> 
>       for (int i = 0x12340; i < 0x1234A; i+= 2) {
>               memcpy (&memory[i], &val, sizeof val); // D way???
>               val++;
>       }
> 
>       for (int i = 0x12340; i < 0x1234A; i+= 2) {
>               memcpy (&val, &memory[i], sizeof val); // D way???
>               writefln("%x", val);
>       }
> }
> 
> achieved in D? I am trying not to use memcpy or any function from the C API.
> 
> Thanks,

While they are in the C stdlib, there is nothing really C
specific about them. Just use them. In your case GCC would
recognize a memcpy call with known length (2 bytes) and inline
the call. From there I guess the optimizer can figure
something out that runs fast.

That said how about this in D:

ushort val = 12345;

for (int i = 0x12340; i < 0x1234A; i+= 2)
        *cast(ushort*) &memory[i] = val++;

for (int i = 0x12340; i < 0x1234A; i+= 2) {
        val = *cast(ushort*) &memory[i]
        writefln("%04x", val);
}


-- 
Marco

Reply via email to