zoukankan      html  css  js  c++  java
  • 动态存储区(堆)、动态存储区(栈)、静态存储区、程序代码区

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

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

    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 }
  • 相关阅读:
    数据结构与算法之递归与调用栈
    Linux 压缩命令之tar和zip
    算法的时间复杂度—大O表示法
    Linux三大文本处理工具之awk
    Linux 排序命令之 sort, wc, uniq
    oracle性能优化之索引
    Linux三大文本处理工具之sed命令
    Linux三大文本处理工具之grep命令
    linux查看端口
    linux查看mac地址
  • 原文地址:https://www.cnblogs.com/denggelin/p/5540120.html
Copyright © 2011-2022 走看看