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

本文在Ubuntu环境中探讨了C语言编程中的全局变量、局部变量以及堆栈的概念。强调了静态分配内存和动态分配内存的区别,并阐述了栈地址向下增长、堆地址向上增长等内存管理特性。
摘要由CSDN通过智能技术生成

重温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、C/C++程序内存的各种变量存储区域和各个区域详解
2、C语言中,局部变量、全局变量、静态变量、堆、栈的内存地址
3、C语言中关键字volatile追根问底

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值