C语言中内存分布及程序运行加载过程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中内存分布及程序运行加载过程相关的知识,希望对你有一定的参考价值。
参考技术A 一个程序内存分配:
下图是APUE中的一个典型C内存空间分布图(虚拟内存)
例如:
int g1=0, g2=0, g3=0;
int max(int i)
int m1=0,m2,m3=0, p_max;
static n1_max=0,n2_max,n3_max=0;
p_max = (int )malloc(10);
printf("打印max程序地址\\n");
printf("in max: 0xx\\n\\n",max);
printf("打印max传入参数地址\\n");
printf("in max: 0xx\\n\\n",&i);
printf("打印max函数中静态变量地址\\n");
printf("0xx\\n",&n1_max); //打印各本地变量的内存地址
printf("0xx\\n",&n2_max);
printf("0xx\\n\\n",&n3_max);
printf("打印max函数中局部变量地址\\n");
printf("0xx\\n",&m1); //打印各本地变量的内存地址
printf("0xx\\n",&m2);
printf("0xx\\n\\n",&m3);
printf("打印max函数中malloc分配地址\\n");
printf("0xx\\n\\n",p_max); //打印各本地变量的内存地址
if(i) return 1;
else return 0;
int main(int argc, char **argv)
static int s1=0, s2, s3=0;
int v1=0, v2, v3=0;
int p;
p = (int )malloc(10);
printf("打印各全局变量(已初始化)的内存地址\\n");
printf("0xx\\n",&g1); //打印各全局变量的内存地址
printf("0xx\\n",&g2);
printf("0xx\\n\\n",&g3);
printf("======================\\n");
printf("打印程序初始程序main地址\\n");
printf("main: 0xx\\n\\n", main);
printf("打印主参地址\\n");
printf("argv: 0xx\\n\\n",argv);
printf("打印各静态变量的内存地址\\n");
printf("0xx\\n",&s1); //打印各静态变量的内存地址
printf("0xx\\n",&s2);
printf("0xx\\n\\n",&s3);
printf("打印各局部变量的内存地址\\n");
printf("0xx\\n",&v1); //打印各本地变量的内存地址
printf("0xx\\n",&v2);
printf("0xx\\n\\n",&v3);
printf("打印malloc分配的堆地址\\n");
printf("malloc: 0xx\\n\\n",p);
printf("======================\\n");
max(v1);
printf("======================\\n");
printf("打印子函数起始地址\\n");
printf("max: 0xx\\n\\n",max);
return 0;
打印结果:
ELF目标文件格式的最前端是 ELF****文件头(****ELF Header****) ,
包含了描述整个文件的基本属性,如ELF版本、目标机器型号、 程序入口地址 等
3 加载:
以上是关于C语言中内存分布及程序运行加载过程的主要内容,如果未能解决你的问题,请参考以下文章