gpt4 book ai didi

c - 为什么 malloc 总是返回 0x 的地址???????8

转载 作者:行者123 更新时间:2023-12-02 05:31:16 25 4
gpt4 key购买 nike

我写了一个简单的代码:-

 void * aa = malloc(10 * sizeof(char));
printf("%X\n", aa);
free(aa);

它总是打印?????????8,
我想问的是:
malloc 是否总是返回 4*n 地址?
为什么这里地址的最后一个数字总是8?为什么不是 4 或 C?
我的环境:
Ubuntu 10.04(32 位)
gcc 版本 4.4.3

最佳答案

原因一般根源于alignment问题;约束是为了满足处理器要求,协助cache optimization strategies或其他原因。

作为满足系统(操作系统、语言规范、处理器)对齐要求的核心目的的一部分,否则会导致错误(根据系统而产生不同的影响)或低效行为(必须进行额外的内存读取才能获得相同的数据由于它在运行时跨越内存块边界),因此将适用最小对齐要求。

但是,您可能会凭经验发现它们的对齐程度甚至比上述约束严格要求的程度更高。例如,特定的分配器实现可能会出于以下原因增加它:

  • 添加内存溢出屏障和/或其他完整性检查/验证机制
  • 允许更有效地存储指针(例如,如果您知道底部 4 位为零,则可以在持久化它们时以某种方式将它们打包
  • 简化或提高地址计算的效率
  • 减少碎片化和/或其他原因,这些原因似乎对单个分配没有好处,但在更大的分配集中满足了某些目标
  • 关于c - 为什么 malloc 总是返回 0x 的地址???????8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9157366/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com