• 动态存储区(堆)、动态存储区(栈)、静态存储区、程序代码区


    动态存储区(堆)、动态存储区(栈)、静态存储区、程序代码区

    动态存储区(堆):(动态分配)

    malloc动态分配在heap堆区。

    动态存储区(堆),程序员自己分配自己释放。

    动态存储区(栈):(动态分配)

    自动变量、const变量在stack栈区。

    动态存储区(栈),系统自动分配释放。

    静态存储区:(静态分配)

    extern全局变量,在static静态存储区。

    静态存储区,一旦分配,不会被回收,可读可写

    程序代码区:(静态分配)

    main函数、其他函数在code程序代码区。

    程序代码区,一旦分配,可读不可写,不可改变

    堆和栈

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 main()
     7 {
     8     void *p1 = malloc(20);
     9     void *p2 = malloc(30);
    10     printf("%x,%x
    ", &p1, &p2);//地址在栈上
    11     printf("%x,%x
    ", p1, p2);//在堆区
    12 
    13     system("pause");
    14 }

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 #include<windows.h>
     6 
     7 main()
     8 {
     9     //堆,不知道要用多少内存的时候,需要手动释放
    10     //堆可以处理很大的内存
    11     //堆就是malloc或者realoc或者calloc分配的内存
    12 
    13     while (1)
    14     {
    15         void *p = malloc(1024 * 1024 * 30);
    16         Sleep(2000);
    17         free(p);
    18         Sleep(2000);
    19     }
    20 
    21     system("pause");
    22 }

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 main()
     7 {
     8     //栈,用完了内存就立刻回收,再次利用
     9 
    10     while (1)
    11     {
    12         double x[1024 * 50 * 200];
    13     }
    14 
    15     system("pause");
    16 }
  • 相关阅读:
    布局的诡异bug合集+解决方法(更新中)
    java并发:CopyOnWriteArrayList简单理解
    java集合: LinkedList源码浅析
    Idea设置类注释模板
    jquery使用FormData提交数据
    postman发送json请求
    消息队列的简单理解
    如何设计一个消息队列?
    SpringBoot配置logback
    linux下安装kafka
  • 原文地址:https://www.cnblogs.com/denggelin/p/5540120.html
Copyright © 2020-2023  润新知