Linux 内存布局测试

来源:互联网 发布:mac office 编辑:程序博客网 时间:2024/06/03 23:35

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

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



程序栗子:


#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 命令查看


0 0
原创粉丝点击