程序有内存访问问题时经常会发生段错误,有必要首先理解内存布局
下图给出了各种内存种类的分布
程序栗子:
#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 命令查看