Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据测试

ubuntu系统中编程重温C语言程序里全局变量、局部变量、堆、栈

重温C语言程序里全局变量、局部变量、堆、栈

一、步骤

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 编译后(以往实验操作不再赘述)结果如下。
在这里插入图片描述

二、结论

·静态分配内存是在程序编译和链接时就确定好的内存。
·动态分配内存是在程序加载、调入、执行的时候分配/回收的内存。
·栈的地址向下增长
·堆的地址向上增长
·静态变量地址向下增长
·全局常量地址向上增长
·函数地址向上增长
·函数一直到栈区,地址总体是从低地址到高地址逐步递增。

三、参考资料

1、

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: ThinkPHP6项目基操(12.实战部分 验证码)

下一篇: Leetcode C++二维数组初始化问题

精华推荐