我遇到了以下代码:
int main()
{
char *A=(char *)malloc(20);
char *B=(char *)malloc(10);
char *C=(char *)malloc(10);
printf("\n%d",A);
printf("\t%d",B);
printf("\t%d\n",C);
return 0;
}
//output-- 152928264 152928288 152928304
我想知道分配和填充是如何完成的malloc()
。查看输出,我可以看到起始地址是 8 的倍数。还有其他规则吗?
根据本文档页面 http://www.delorie.com/gnu/docs/glibc/libc_31.html,
GNU 系统中 malloc 或 realloc 返回的块地址始终是 8 的倍数(在 64 位系统上是 16 的倍数)。
一般来说,malloc
实现是特定于系统的。它们都为自己的簿记保留了一些内存(例如分配块的实际长度),以便在您调用时能够正确释放该内存free
。如果需要对齐到特定边界,请使用其他函数,例如posix_memalign http://linux.die.net/man/3/posix_memalign.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)