v_ae 2017-09-22 09:43
浏览 466

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

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥20 delta降尺度方法,未来数据怎么降尺度
    • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
    • ¥15 再不同版本的系统上,TCP传输速度不一致
    • ¥15 高德地图点聚合中Marker的位置无法实时更新
    • ¥15 DIFY API Endpoint 问题。
    • ¥20 sub地址DHCP问题
    • ¥15 delta降尺度计算的一些细节,有偿
    • ¥15 Arduino红外遥控代码有问题
    • ¥15 数值计算离散正交多项式
    • ¥30 数值计算均差系数编程