您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页C/C++内存分区详解

C/C++内存分区详解

来源:爱问旅游网

uninitialized data和initialized data统称为全局数据区

text区又叫代码区(或代码段),这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

char *s = "HelloWorld";

指针s存放于栈区,"HelloWorld"存放于text区,不可修改
*s = ‘h’ 尝试修改字符串第一个字符,将会出现编译通过,运行报错的情况,因为text区一般是只读的,不可修改。

举例分析:

#include <iostream>
int global_a = 1;
static int global_b = 2;
int global_c = 3;
int global_d;
int global_e;
int main()
{
    int a = 11;
    int b = 22;
    int c = 33;
    static int static_a = 4;
    static int static_b;
    static int static_c;
    printf("a的地址为:%p\n", &a);
    printf("b的地址为:%p\n", &b);
    printf("c的地址为:%p\n", &c);
    int arr[5] = { 1,2,3,4,5 };
    int len = sizeof(arr) / sizeof(arr[0]);
    for (int i = 0; i < len; i++)
    {
        printf("&arr[%d]: %p\n", i, &arr[i]);
    }
    printf("global_a的地址为:%p\n", &global_a);
    printf("global_b的地址为:%p\n", &global_b);
    printf("global_c的地址为:%p\n", &global_c);
    printf("global_d的地址为:%p\n", &global_d);
    printf("global_e的地址为:%p\n", &global_e);
    printf("static_a的地址为:%p\n", &static_a);
    printf("static_b的地址为:%p\n", &static_b);
    printf("static_c的地址为:%p\n", &static_c);

    char s1[] = "HelloWorld";
    char* s2 = "HelloWorld";
    char* s3 = "HelloWorld";
    printf("s1:%p\n", s1);
    printf("s2:%p\n", s2);
    printf("s3:%p\n", s3);
}

结果:

参考:
1.
2.

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务