c - 堆地址减少,增加
问题描述
为什么堆在一定级别后增加然后减少然后再次增加? 在 Linux 操作系统中
当我研究操作系统和内存结构时,我发现一些奇怪的地址增加......
该程序很简单,只是递归调用堆栈和堆增加。
void recursive(int count){
long stack;
long* heap;
heap = (long*)malloc(sizeof(long)*100000000000);
heap = (long*)malloc(sizeof(long)*100000);
if((long*)heap >= (long*)&stack){
printf("heap is contact with stack\n");
exit(1);
}
printf("%diteration \\ heap : %p || stack : %p\n",count, heap, &stack);
recursive(++count);
}
解决方案
您的heap
指针不指向堆的顶部。它指向分配的内存块,它可以在任何地方。最接近您要查找的是中断指针,您可以通过调用sbrk(0)
. 请注意,在现代系统中,您不一定有一个连续的堆。这里有一个详细的解释:
brk() 系统调用是做什么的?
推荐阅读
- labview - 是否有可能两个位移传感器的值(一个是数字输入,另一个是模拟输入)在 vi 中同时表示?
- c# - 使用外部 WPF 窗口进行单词匹配
- android - 将我的应用程序限制为仅从 Googe Play 商店下载
- c# - 为什么我们需要为 Command 设置绑定路径和源 xReference 而不仅仅是属性/命令名称?
- javascript - 使用 express 找不到模块“js”
- java - Lombok 的 @[No|All|Required]ArgsConstructor 注释的 onConstructor 属性是否仅适用于 Java 7 样式?
- javascript - 获取更改时选择的值
- php - Laravel如何在需要最小长度时允许为空
- html - 当我使用 CSS 中的悬停元素来翻译 {transform: translateX(20px)} 导航栏链接到左侧时,整个网页左右摇晃
- ansible - Ansible 模板尝试计算未使用条件分支中的变量:这是正常行为吗?