c++ - MacOS Monterey 中的堆内存分配
问题描述
我刚刚升级到 MacOS Monterey,我看到在堆上分配内存(malloc/new)时返回的地址有一些不寻常的行为。似乎如果你要求超过 256 个字节,你会得到一个略高于 PAGE_ZERO (0x100000000) 的地址,但如果你要求 256 个字节或更少,你会得到一个高于 0x600000000000 的地址。
我知道 c 库在堆上分配时可以自由地返回它喜欢的任何地址,这对您的代码无关紧要。但是我的代码依赖于位于同一内存区域中的堆地址。我知道这是不好的编程,但这是有原因的。
有没有办法让蒙特雷在同一内存区域分配内存(除了总是分配超过 256 个字节)?谢谢你的任何想法。
示例代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
size_t i,count = 2;
for (i = 0; i < 16; i++)
{
void *ptr = malloc(count);
printf("malloc(%d) returned %p\n",count,ptr);
count *= 2;
}
for (count = 250; count < 260; count++)
{
void *ptr = malloc(count);
printf("malloc(%d) returned %p\n",count,ptr);
}
return 0;
}
解决方案
推荐阅读
- javascript - 如何在 javascript 函数中访问 Mustache 文件 [更新]?
- css - 如何使用react js的app.css修复右侧导航栏上重叠的导航栏下拉菜单
- c++ - lower_bound() STL 中的自定义比较器
- scala - 在 Scala 中,什么时候需要指定惰性?
- java - 检索 Firebase 数据库数据并制作列表
- ruby-on-rails - 我如何在rails中绘制利润损失图
- mysql - 带有日期范围的 MySQL 期初期末余额
- cmd - 使用 CMD、软件或类似工具自动设置文件夹中每个文件的创建日期以自动调整其自己的“最后修改”日期
- node.js - 类型错误:localizify.add 不是函数
- angular - 客户是否可以在 Angular 中查看我的 TypeScript 类并在部署后更改它们?