我需要分配4字节的内存,分配的内存地址应该是4的倍数。例如:400,404,408,40c
如果我使用任何内存分配函数,我会收到可用的内存,并且地址不一定是4的倍数。
因此,任何人都可以建议实现这种设计。
发布于 2011-03-12 13:00:31
在微软的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);发布于 2011-03-12 12:52:40
在您的分配量上加3。分配内存。如果返回的地址不是4的倍数,则将其向上舍入,直到它是4的倍数。(您必须四舍五入的最大值是3,这就是为什么您要提前将分配填充那么多。)
当您释放内存时,请记住释放原始地址,而不是四舍五入的值。
发布于 2011-10-24 21:11:51
Guy Sirton给出了正确的答案,但它是模棱两可的,可能会导致潜在的错误。
该示例显示了大小和对齐方式的值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);
#endifhttps://stackoverflow.com/questions/5280625
复制相似问题