c-内存对齐和分配与malloc



我正在用C编写一个库函数,它将返回32位的块。我使用malloc()来达到这个目的。以下内容是否总是保证以连续的方式分配了32位内存?

char *base_ptr = (char*)malloc(4*sizeof(char))?

如何确保它被分配到4字节的边界上?

是。您将获得一个连续的4字节内存块。

不是32字节。如果你的意思是32位,那么这是不保证的,但在典型的台式机上,CHAR_BIT是8,然后,是的,你的4个字节等于32位。

是的,它是连续的,但不需要在4字节的边界上分配。

这是4个字节。如果您希望32个字节是连续的,那么您应该将4更改为32。

不能保证一个malloc调用在下一个(实际上是实现)pad块之后连续分配。

sizeof(char)始终为1。根本没有理由把它写在代码中。铸造malloc()的返回值也被许多人认为是糟糕的风格。

如果你需要尽可能接近32位(最小开销),并且你想让非常可移植,你可能想要这样的东西:

char *base_ptr = malloc((32 + CHAR_BIT - 1) / CHAR_BIT);

对标题中的单词"alignment"进行寻址。

标准malloc不能保证返回的分配的一致性。特定的实现可能会也可能不会在该领域中起到帮助作用,也可能会有或没有某种扩展来允许您控制返回的块的对齐。然而,这些东西是不可移植的。

正如其他人所说,每个分配都保证是连续的,至少和你要求的一样大;但是不能保证任何一对分配的相对定位。也没有一种可移植的方法来发现实际分配的大小,这使得访问超过请求大小的内存是不安全和不明确的(同样,一些实现可能提供解决这些问题的扩展)。

相关内容

  • 没有找到相关文章

最新更新