首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存分配-4的倍数中的地址

内存分配-4的倍数中的地址
EN

Stack Overflow用户
提问于 2011-03-12 12:48:25
回答 3查看 1.1K关注 0票数 0

我需要分配4字节的内存,分配的内存地址应该是4的倍数。例如:400,404,408,40c

如果我使用任何内存分配函数,我会收到可用的内存,并且地址不一定是4的倍数。

因此,任何人都可以建议实现这种设计。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-12 13:00:31

在微软的C/C++编译器中,你可以使用_aligned_malloc,在Linux posix_memalign中也可以使用。

MSVC:

代码语言:javascript
复制
ptr = _aligned_malloc(4, 4);

签名:

代码语言:javascript
复制
void * _aligned_malloc(size_t size, size_t alignment);

Linux:

代码语言:javascript
复制
posix_memalign(&ptr, 4, 4); // returns 0 if successful

签名(注意顺序与MSFT相反):

代码语言:javascript
复制
int posix_memalign(void **memptr, size_t alignment, size_t size);
票数 5
EN

Stack Overflow用户

发布于 2011-03-12 12:52:40

在您的分配量上加3。分配内存。如果返回的地址不是4的倍数,则将其向上舍入,直到它是4的倍数。(您必须四舍五入的最大值是3,这就是为什么您要提前将分配填充那么多。)

当您释放内存时,请记住释放原始地址,而不是四舍五入的值。

票数 2
EN

Stack Overflow用户

发布于 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)

一个更好的例子是非对称的,例如:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5280625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档