• C语言-存储期2.0


    静态存储期

    在数据段中分配的变量,统统拥有静态存储期,因此也都被称为静态变量。这里静态的含义,指的是这些变量的不会因为程序的运行而发生临时性的分配和释放,它们的生命周期是恒定的,跟整个程序一致。

    • 静态变量包含:

      • 全局变量:不管加不加 static,任何全局变量都是静态变量。
      • static 型局部变量。
    • 示例代码:

    1. int g1; // 静态存储期
    2. static int g2; // 静态存储期
    3. int main()
    4. {
    5. int a, b;
    6. static int c; // 静态存储期
    7. }
    • 注意1:
      • 若定义时未初始化,则系统会将所有的静态数据自动初始化为0
      • 静态数据初始化语句,只会执行一遍。
      • 静态数据从程序开始运行时便已存在,直到程序退出时才释放。
    • 注意2:
      • static修饰局部变量:使之由栈内存临时数据,变成了静态数据。
      • static修饰全局变量:使之由各文件可见的静态数据,变成了本文件可见的静态数据。

    自定义存储期

    在堆中分配的变量,统统拥有自定义存储期,也就是说这些变量的分配和释放,都是由开发者自己决定的。由于堆内存拥有高度自治权,因此堆是程序开发中用得最多的一片区域。

    • 相关API:
      • 申请堆内存:malloc() / calloc()
      • 清零堆内存:bzero()
      • 释放堆内存:free()

    • 示例:
    1. int *p = malloc(sizeof(int)); // 申请1块大小为 sizeof(int) 的堆内存
    2. bzero(p, sizeof(int)); // 将刚申请的堆内存清零
    3. *p = 100; // 将整型数据 100 放入堆内存中
    4. free(p); // 释放堆内存
    5. // 申请3块连续的大小为 sizeof(double) 的堆内存
    6. double *k = calloc(3, sizeof(double));
    7. k[0] = 0.618;
    8. k[1] = 2.718;
    9. k[2] = 3.142;
    10. free(k); // 释放堆内存
    • 注意:
      • malloc()申请的堆内存,默认情况下是随机值,一般需要用 bzero() 来清零。
      • calloc()申请的堆内存,默认情况下是已经清零了的,不需要再清零。
      • free()只能释放堆内存,不能释放别的区段的内存。
    • 释放内存的含义:
      • 释放内存意味着将内存的使用权归还给系统。
      • 释放内存并不会改变指针的指向。
      • 释放内存并不会对内存做任何修改,更不会将内存清零。
  • 相关阅读:
    如何解决wmv/asf/asx格式转成mp4/avi/3gp/mpg/flv的问题
    JavaWeb — Servlet — 剩余内容+JSP
    订单拆分总结
    软件UI自动化测试应该怎么做?对软件产品起到什么作用?
    字符串7——重复的子字符串
    炫酷转换:Java实现Excel转换为图片的方法
    adb_adb file transfer文件传输(adb push/pull)
    LeetCode. 基本数据结构
    基于动态规划法的水力发电优化调度(Python代码实现)
    JavaWeb
  • 原文地址:https://blog.csdn.net/lcannal/article/details/136617118