堆栈全局区常量区代码区

在这里插入图片描述
代码区:存放程序的代码,即CPU执行的机器指令,并且是只读的。
常量区:存放常量(程序在运行的期间不能够被改变的量,例如: 10,字符串常量”abcde”, 数组的名字等)
静态区(全局区):静态变量和全局变量的存储区域是一起的,一旦静态区的内存被分配, 静态区的内存直到程序全部结束之后才会被释放
堆区:由程序员调用malloc()函数来主动申请的,需使用free()函数来释放内存,若申请了堆区内存,之后忘记释放内存,很容易造成内存泄漏
栈区:存放函数内的局部变量,形参和函数返回值。栈区之中的数据的作用范围过了之后,系统就会回收自动管理栈区的内存(分配内存 , 回收内存),不需要开发人员来手动管理。栈区就像是一家客栈,里面有很多房间,客人来了之后自动分配房间,房间里的客人可以变动,是一种动态的数据变动。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int i = 10; /*全局区/静态区*/
static m = 1; /*全局区/静态区*/
int main()
{
        int a = 3;/*栈*/
        int b = 3;/*栈*/
        char *c;/*栈*/
        char *p = "abc";/*常量区*/
        char *e = (char *)malloc(10); /*堆区*/
        static n = 1; /*全局区/静态区*/

        printf("address i = 0x%X\n", &i);
        printf("address a = 0x%X\n", &a);
        printf("address b = 0x%X\n", &b);
        printf("address c = 0x%X\n", c);
        printf("address p = 0x%X\n", p);
        printf("address e = 0x%X\n", e);
        c = p;
        strcpy(e, p);
        printf("address c = 0x%X\n", c);
        printf("address e = 0x%X\n", e);
        printf("address m = 0x%X\n", &m);
        printf("address n = 0x%X\n", &n);
		printf("address main = 0x%X\n", main);
        return 0;
}

kayshi@ubuntu:~/code/Test$ ./test2 
address i = 0x21A16010
address a = 0xE5BD54A8
address b = 0xE5BD54AC
address c = 0xE5BD55B0
address p = 0x21815954
address e = 0x22468260
address c = 0x21815954
address e = 0x22468260
address m = 0x21A16014
address n = 0x21A16018
address main = 0x2181574A

全局区/静态区 是 i,m, n 地址0x21A16010,0x21A16014,0x21A16018是连续的
栈区是a, b, c 地址为 0xE5BD54A8,0xE5BD54AC,0xE5BD55B0
堆区是e 地址为 0x22468260
常量区为p 地址为 0x21815954 后面的c = p 指针c原来是指向堆区的,现在指向的常量区
代码区main函数的地址为 0x2181574A

通过与上图的比较可以得到。分配的位置符和

区域地址
栈区a :0xE5BD54A8
堆区e:0x22468260
静态区(全局区)i:0x21A16010
常量区p:0x21815954
代码区main:0x2181574A
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值