malloc边界大小:是否存在性能差异

时间:2016-04-02 09:15:09

标签: c malloc

我在C上的初学者课程中有一些注释说明malloc返回指向与x86机器上16字节边界对齐的块的指针。

这是否意味着调用malloc(1)没有任何优势,即性能与调用malloc(16)没有区别?

2 个答案:

答案 0 :(得分:2)

每次调用malloc都不需要它向操作系统询问内存。当需要在内存上进行大量吸盘时,它会询问操作系统,然后为您分配一些内容。在将来的调用中,它将具有备用的位,并且可以在不需要操作系统的情况下将其分配给您。

因此,它将分配便于处理器使用的内存 - 通常是对齐的。

你应该只分配所需的内存,让malloc整理其余的内容。

答案 1 :(得分:2)

C标准说

  

如果分配成功,则返回指针适当对齐,以便可以将其指定给指向具有基本对齐要求的任何类型对象的指针,然后用于访问此类对象或数组分配的空间中的此类对象(直到空间被明确释放)。

所以指针对齐不是16个字节,而是实现定义的;在你的实现上,碰巧有某些类型的对象需要在内存中进行16字节对齐;因此malloc返回的指针是16字节对齐的。

然而,这并不意味着char *p = malloc(1)为16个字节分配内存 - 相反,你 不能触及p[0]以外的任何内存; malloc还需要一些内部簿记,因此malloc(1)可能会消耗总共16个字节的内存,而malloc(16)将消耗32或64;你不会知道的。