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

Roe*_*yen 7 memory performance d

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

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

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

如何快速填充结构:

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);
}
Run Code Online (Sandbox Code Playgroud)

谢谢!罗埃尔

Fee*_*ure 12

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


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

对于第二个:


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;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,正是我需要的!是的,我会成为一个好孩子而不是使用未对齐的记忆:-) (2认同)

dsi*_*cha 8

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