微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

内存对齐和分配与malloc

如何解决内存对齐和分配与malloc

| 我正在用C写一个函数,它将返回32位的块。我为此使用malloc()。以下内容将始终保证以连续方式分配32位内存吗?
char *base_ptr = (char*)malloc(4*sizeof(char))?
我如何确保它分配在4个字节的边界上?     

解决方法

        是。您将获得一个连续的4字节内存块。 不是32个字节。如果您指的是32位,则无法保证,但是在典型的台式机上,“ 1”为8,那么,是的,您的4个字节等于32位。     ,        是的,它将是连续的-但不必在4字节边界上分配它。     ,        这是4个字节。如果要连续32个字节,则应将4更改为32。 无法保证一个malloc调用在下一个(实际上是实现)填充块之后连续分配。     ,        
sizeof(char)
始终是
1
。完全没有理由在您的代码中编写该代码。铸造
malloc()
的返回值也被很多人认为是不好的风格。 如果您需要尽可能接近32位(最小开销)并且想要非常便携,那么您可能需要类似以下内容:
char *base_ptr = malloc((32 + CHAR_BIT - 1) / CHAR_BIT);
    ,        在标题中使用单词“ alignment \”。 标准“ 6”不能保证返回分配的对齐。特定的实现可能会或可能不会对该领域有所帮助,并且可能会或可能不会具有某种扩展以允许您控制返回的块的对齐方式。但是,这些东西将无法移植。 正如其他人所说,每次分配都保证是连续的,并且至少与您的要求一样大。但不能保证任何一对分配的相对位置。也没有一种可移植的方法来发现实际分配的大小,这使得访问超出请求大小的内存不安全且未定义(同样,某些实现可能提供扩展来解决这些问题)。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。