C++ 内存对齐和长拷贝

C++ 内存对齐和长拷贝,c++,c,memory,alignment,C++,C,Memory,Alignment,如果我们假设我将内存块与memalign对齐为4字节,那么这样做是否仍然安全: unsigned int* source = In.Data; unsigned int* dest = Out.Data; int loops = In.Size / 4; //size is the same for both in/out while (loops) { *dest++=*source++; loops--; } 而是一次复制1字节?如果不知道如何判断内存是否正确对齐,以

如果我们假设我将内存块与memalign对齐为4字节,那么这样做是否仍然安全:

unsigned int* source = In.Data;
unsigned int* dest = Out.Data;

int loops = In.Size / 4; //size is the same for both in/out 

while (loops)
{
    *dest++=*source++;
    loops--;
}

而是一次复制1字节?如果不知道如何判断内存是否正确对齐,以便在需要时回退到标准字节拷贝?

是,这是安全的,因为块已正确对齐


如果从
malloc
获取您的块也是安全的,因为
malloc
返回的内存块保证在任何情况下都能正确对齐

您必须将内存对齐到
alignof(unsigned int)
,而不是“4字节”。是的,我这样做了(sizeof(unsigned int))D:但是通常不需要
alignof(T)==sizeof(T)
。例如,考虑<代码>长双倍/代码>类型。谢谢及时回复:D