zoukankan      html  css  js  c++  java
  • C语言进阶之路(一)----C语言的内存四区模型

    内存四区模型:
    操作系统给C/C++编写的程序分配内存,通常将分配的内存划分为以下四个区域:
    1.栈区:存放局部变量,用完由操作系统自动释放
    2.堆区:动态分配给程序的内存区域,由程序员手动释放
    3.数据区:
    分为两种:
    (1)常量区:存放常量,一般是字符串常量
    (2)全局区/静态区:存放全局变量和静态变量
    4.代码区:
    存放可执行代码的区域

    示例如下:

     1 int main()
     2 {
     3     char buf1[10] = "aaaa";
     4 
     5     char buf2[] = "bbbb";
     6 
     7     char *p1 = "1111";
     8 
     9     //动态分配内存
    10     char *p2 = (char *)malloc(10*sizeof(char));
    11 
    12     strcpy(p2, "3333");
    13 
    14     return 0;
    15 }

    内存四区图:

     

     补充:

    栈的生长方向和数组内元素的存放方向相反
    堆的生长方向和数组内元素的存放方向相同

    验证:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     char buf1[10] = "aaaa";
     6     char buf2[] = "bbbb";
     7     char *p1 = "1111";
     8     //动态分配内存
     9     char *p2 = (char *)malloc(10 * sizeof(char));
    10     strcpy(p2, "3333");
    11 
    12     printf("buf1的地址是%d
    ", buf1);
    13     printf("buf1的地址是%d
    ", buf2);
    14 
    15     printf("======================
    ");
    16 
    17     printf("buf[0]的地址是%d
    ", &buf1[0]);
    18     printf("buf[0]的地址是%d
    ", &buf1[1]);
    19 
    20     printf("======================
    ");
    21 
    22     printf("p2[0]的地址是%d
    ", &p2[0]);
    23     printf("p2[1]的地址是%d
    ", &p2[1]);
    24 
    25     return 0;
    26 }

    打印结果:

    说明栈的生长方向是向下的,数值逐渐减小;栈中数组的元素的存放方向与之相反,是向上的,数值逐渐增大;堆的生长方向向上,数值逐渐增大。

  • 相关阅读:
    watir简单使用
    一些简单的Linux网络配置命令
    Watir识别HTML元素的方法及watir api补充
    web系统测试
    测试方法
    内存泄漏检测工具
    跟我一起学Oracle 11g【10】Oracle 中的那些函数
    限制textarea 文本框的长度(收集了几个办法)
    跟我一起学Oracle 11g【9】SQL 基础学习[嵌套查询]
    通过程序启用/禁用 网络连接(提供4种思路 你值得拥有)
  • 原文地址:https://www.cnblogs.com/crazyzhang/p/5727822.html
Copyright © 2011-2022 走看看