我需要分配4字节内存,分配的内存地址应该是4的倍数。 例如:400,404,408,40c
如果我使用任何内存分配功能,我会收到可用的内存,地址不一定是4的倍数。
所以任何人都可以建议实现这种设计。
答案 0 :(得分:5)
在Microsoft C / C ++编译器中,您可以使用_aligned_malloc和Linux posix_memalign。
<强> MSVC:强>
ptr = _aligned_malloc(4, 4);
签名:
void * _aligned_malloc(size_t size, size_t alignment);
<强> Linux的:强>
posix_memalign(&ptr, 4, 4); // returns 0 if successful
签名(与MSFT相比,注释顺序相反):
int posix_memalign(void **memptr, size_t alignment, size_t size);
答案 1 :(得分:2)
为您的分配金额添加3。分配内存。如果返回的地址不是4的倍数,则将其四舍五入直到它为止。 (你最需要整理的是3,这就是为什么你要提前填写你的分配。)
当您释放内存时,请记住释放原始地址,而不是舍入值。
答案 2 :(得分:0)
Guy Sirton 给出了正确的答案,但它含糊不清,可能导致潜在的错误。
其中的示例显示了 size 和 alignment 的值4
但_aligned_malloc()
和posix_memalign()
的实际论点是相反的:
_aligned_malloc( size_t size, size_t alignment )
posix_memalign(void **memptr, size_t alignment, size_t size)
更好的例子是非对称的,例如:
size_t alignment = 16; // Must be a power of 2
size_t size = 10; // Not necessarily a power if 2
#ifdef _MSC_VER
ptr = _aligned_malloc(size, alignment);
#else
posix_memalign(&ptr, alignment, size);
#endif