我如何在D中执行类似memcpy的操作

时间:2011-09-02 09:16:49

标签: performance memory d

我有一个内存位置a,我想快速将一定数量的字节复制到另一个位置,我将如何在D中执行此操作?

例如,我将如何做到这一点:

int main()
{
    void* src_data = 0x40001255;
    void* dst_data = 0x47F22000;
    u32 size = 0x200;
    memcpy(dst_data, src_data, size);
}

如何快速填充结构:

struct data_struct
{
    u32 block1;
    u32 block2;
    u32 block3;
    u32 block4;
    u32 block5;
    u62 block6;
    u128 bigblock;
} data_struct_t;

int main()
{
    void* src_data = 0x40001255;
    struct data_struct_t dst_data; 
    u32 size = sizeof(data_struct);
    memcpy(dst_data, src_data, size);
}

谢谢! 罗埃尔

2 个答案:

答案 0 :(得分:12)

分配到切片将执行数组副本,该副本在内部调用memcpy。


void main()
{
    void* src_data = 0x40001255;
    void* dst_data = 0x47F22000;
    uint size = 0x200;
    dst_data[0..size] = src_data[0..size];
}

对于第二个:


struct data_struct
{
    uint block1, block2, block3, block4, block5;
    ulong block6;
    uint[4] bigblock;
}

void main()
{
    auto src_data = cast(data_struct*) 0x40001255; // unaligned, WTF?!
    auto dst_data = *src_data;
}

答案 1 :(得分:8)

请注意,您还可以访问D中的C memcpy .D可以直接访问C的整个标准库。