gpt4 book ai didi

c - 为什么 mmap() 按降序返回地址,而 malloc() 按升序返回地址?

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:42 24 4
gpt4 key购买 nike

我想知道为什么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() 分配分开,从而从堆的每一端分配它们。

关于c - 为什么 mmap() 按降序返回地址,而 malloc() 按升序返回地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57832528/

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