ubuntu系统中编程重温C语言程序里全局变量、局部变量、堆、栈
日期: 2020-12-03 分类: 跨站数据测试 337次阅读
一、步骤
1.1 打开ubuntu,编写ctest.c文件。
#include <stdio.h>
#include <stdlib.h>
int k1 = 1;
int k2;
static int k3 = 2;
static int k4;
int main( )
{ static int m1=2, m2;
int i = 1;
char *p;
char str[10] = "hello";
char *var1 = "123456";
char *var2 = "abcdef";
int *p1=malloc(4);
int *p2=malloc(4);
free(p1);
free(p2);
printf("栈区-变量地址\n");
printf(" i:%p\n", &i);
printf(" p:%p\n", &p);
printf(" str:%p\n", str);
printf("\n堆区-动态申请地址\n");
printf(" %p\n", p1);
printf(" %p\n", p2);
printf("\n.bss段\n");
printf("全局外部无初值 k2:%p\n", &k2);
printf("静态外部无初值 k4:%p\n", &k4);
printf("静态内部无初值 m2:%p\n", &m2);
printf("\n.data段\n");
printf("全局外部有初值 k1:%p\n", &k1);
printf("静态外部有初值 k3:%p\n", &k3);
printf("静态内部有初值 m1:%p\n", &m1);
printf("\n常量区\n");
printf("文字常量地址 :%p\n",var1);
printf("文字常量地址 :%p\n",var2);
printf("\n代码区\n");
printf("程序区地址 :%p\n",&main);
return 0;
}
1.2 编译后(以往实验操作不再赘述)结果如下。
二、结论
·静态分配内存是在程序编译和链接时就确定好的内存。
·动态分配内存是在程序加载、调入、执行的时候分配/回收的内存。
·栈的地址向下增长
·堆的地址向上增长
·静态变量地址向下增长
·全局常量地址向上增长
·函数地址向上增长
·函数一直到栈区,地址总体是从低地址到高地址逐步递增。
三、参考资料
精华推荐