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