c - 为什么 mmap() 按降序返回地址,而 malloc() 按升序返回?
问题描述
我想知道为什么 mmap() 以降序返回地址,而 malloc() 以升序返回地址,而它们都在堆中分配内存?
我试过这个:
#include <unistd.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <stdio.h>
#define NUM 6
int main()
{
void *ptr_mmap[NUM];
void *ptr_mall[NUM];
size_t size = 1;
for (int i = 0; i < NUM; i++)
{
ptr_mmap[i] = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE |
MAP_ANONYMOUS, -1, 0);
ptr_mall[i] = malloc(size);
printf("%d mmap ptr = %p\tmalloc ptr = %p\n", i, ptr_mmap[i],
ptr_mall[i]);
}
return 0;
}
输出示例:
0 mmap ptr = 0x7fd752d6d000 malloc ptr = 0x8c3010
1 mmap ptr = 0x7fd752d6b000 malloc ptr = 0x8c3030
2 mmap ptr = 0x7fd752d6a000 malloc ptr = 0x8c3050
3 mmap ptr = 0x7fd752d69000 malloc ptr = 0x8c3070
4 mmap ptr = 0x7fd752d68000 malloc ptr = 0x8c3090
5 mmap ptr = 0x7fd752d67000 malloc ptr = 0x8c30b0
我期望它们都以升序返回地址,因为地址在堆中分配内存时会增长。mmap() 的行为让我感到困惑。
解决方案
这是特定于实现的,即使它在您的系统上以这种方式出现,但对于其他系统可能会有所不同。我的猜测是,您系统上的实现试图将mmap()
分配与分配分开malloc()
,从而从堆的每一端分配它们。
推荐阅读
- node.js - SyntaxError: Unexpected token { in JSON at position 0
- postgresql - 为什么有些字段在 pgAdmin 中不可编辑?
- html - 覆盖不占整页
- sql - 如何旋转这个父子表?
- ios - iOS 模拟器 10.2.1 上的模糊图像性能问题
- azure - 在 azure App Service Deploy 中查找 Azure 插槽位置
- r - 网页抓取时如何避免“HTTP错误代码:429”?
- git - git批量重命名大量提交的文件
- python - Python - 如何以不同的方法与类交互
- r - 用于在 R 中重新排序行的排列和爬山方法