Linux 内存布局测试

程序有内存访问问题时经常会发生段错误,有必要首先理解内存布局

下图给出了各种内存种类的分布



程序栗子:


#include <iostream>
using namespace std;


int globalIni = 0;
int* globalNoIni;


int main()
{
        static int globalStatic = 0;
        int local1 = 0;
        int local2 = 1;
        int* pHeap = (int*)malloc(10);
        globalNoIni = (int*)malloc(20);
        cout<<"text addr:"<<reinterpret_cast<void*>(main)<<"\n"
            <<"data addr:"<<&globalIni<<"\n"
            <<"data addr static:"<<&globalStatic<<"\n"
            <<"bss addr:"<<&globalNoIni<<"\n"
            <<"heap addr1:"<<pHeap<<"\n"
            <<"heap addr2:"<<globalNoIni<<"\n"
            <<"stack addr1:"<<&local1<<"\n"
            <<"stack addr2:"<<&local2<<endl;
        return 0;
}


结果: 

运行结果:

text addr:0x4008e4
data addr:0x601390
data addr static:0x6013a4
bss addr:0x601398
heap addr1:0x12672010
heap addr2:0x12672030
stack addr1:0x7ffff5f022dc
stack addr2:0x7ffff5f022d8

是不是很符合? 大笑


Linux 可以通过 cat /proc/pid/maps 命令查看


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值