• 数据在内存如何分布的?


    目录

    常量区:

    静态区:

    堆(heap):

    栈(stack):

    那么栈和堆有什么不同呢?

    分配方式不同

    生长方向不同

    底层不同


    常量区:

            .code或.text,代码段:

                                    用来存放可执行的机器指令的一块内存区域,这部分区域的代码属于只读。字符串常量也在也在代码段上。

    静态区:

            .data,数据段:

                                    用来存放程序中已初始化的全局变量的一块内存区域,例如已初始化的全局变量和局部静态变量(初始化为非0)。

            .bss:

                                    用来存放程序中未初始化的全局变量的一块内存区域,例如未初始化的全局变量和局部静态变量(未初始化或初始化为0)。

    data段(初始化的段)bss(未初始化的段)都是针对全局变量和静态变量来说的。

    data又分为读写数据段,和只读数据段。

    bss是未初始化的全局变量和静态变量,以及初始化为0的全局变量和静态变量。

    堆(heap):

                            用来存放进程运行中被动态分配的内存段,大小并不固定,可动态扩张或缩减,典型操作malloc和free。堆的申请过程比较复杂,当系统收到程序的申请时,会遍历记录空闲内存地址的链表,以寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。

    栈(stack):

                            存放程序的局部变量,以及函数调用时候,栈用来传递参数和返回值。由于栈的先进后出的特点,特别方便用来保存和回复调用现场。

    让我们直观感受一下:

    1. int a = 0; // 全局初始化区
    2. char *p1; // 全局未初始化区
    3. int main(int argc, const char *argv[])
    4. {
    5. int b; // 栈
    6. char s[] = "abc"; // 栈
    7. char *p2; // 栈
    8. char *p3 = "123456"; // 123456\0在常量区,而p3在栈上
    9. static int c = 0; // 全局(静态)初始化区
    10. p1 = (char *)malloc(10);
    11. p2 = (char *)malloc(20); // 分配得来得10和20字节的区域在堆区
    12. strcpy(p1, "123456"); // 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
    13. return 0;
    14. }

    那么栈和堆有什么不同呢?

    • 分配方式不同

    栈: 由系统自动分配,速度快,空间较小。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为 b 开辟空间。

    堆: 需要程序员自己申请,并指明大小,速度较慢,空间较大,在c中 malloc 函数。需要程序员自己释放。

    如 p1 = (char *)malloc(10); 在 C++ 中用 new 运算符
    如 p2 = (char *)new(10); 但是注意 p1、p2 本身是在栈中的。

    • 生长方向不同

    是由高地址向低地址增长,

    是由低地址向高地址增长。

    • 底层不同

    连续的空间,

    不连续的空间。 

  • 相关阅读:
    node+mysql+navicat一条龙流程
    生产环境一次Linux时钟同步无法正常同步的问题
    Clickhouse通过命令导入导出文件(在Linux命令窗口)
    146.LRU缓存
    Vue 04 (路由SPA的实现)
    C++ Reference: Standard C++ Library reference: C Library: cwchar: fwprintf
    [c语言]二维数组动态分配内存
    多线程详解(三)
    UiPath实战(09) - 不同Windows用户下的文件夹获取问题
    QPair的介绍及用法
  • 原文地址:https://blog.csdn.net/qq_61514490/article/details/125968235