Linux下sbrk分配内存的问题

sbrk的声明原型:void sbrk(intptr_t increment);
该函数分配内存是按照increment大小分配,不足4k(4096)字节按一页算(4k),
并且映射到物理内存。
以下是代码:(就是直接的打印内存地址)
#include
#include
void maps()
{
printf("查看/proc/%u/maps\n", getpid());
getchar();
}
void main()
{
void
p1 = sbrk(4);
printf("p1=%p\n", p1);
void* p2 = sbrk(4);
printf("p2=%p\n", p2);
void* p3 = sbrk(4);
printf("p3=%p\n", p3);
void* p4 = sbrk(4);
printf("p4=%p\n", p4);
void* p5 = sbrk(4);
printf("p5=%p\n", p5);

maps();

}
图片说明

为什么分配了23 * 4k(23页)个字节

64位机版本信息:Linux version 4.4.0-64-generic (buildd@lgw01-56) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #85-Ubuntu SMP Mon Feb 20 11:50:30 UTC 2017

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问