• 内存


    • 内存结构:
      • 静态、全局内存:
        • 静态变量和全局变量存储在一块内存中,内部又分为初始化区和未初始化区,分别存储初始化和未初始化的全局、静态变量。
        • 全局变量作用域:全局作用域(全局变量只需要在一个源文件中定义,即可运用于所有的源文件,使用extern关键字声明要引用的全局变量)
        • 全局变量生命周期:程序运行期一直存在
        • 程序结束后由系统进行释放
        • 例子:
           1 //define.cpp
           2 int value = 1;
           3 
           4 //main.cpp
           5 #include <iostream>
           6 extern int value;//在另一个源文件中声明要引用的变量
           7 
           8 int main(){
           9     std::cout << value << std::end;
          10     return 0;        
          11 }  
        • 全局静态变量作用域:被定义的源文件中可用
        • 全局静态变量生命周期:程序运行期一直存在
        • 静态局部变量作用域:局部变量的作用域
        • 静态局部变量生命周期:程序运行期一直存在
      • 文字常量区:
        • 常量字符串的存储区域,程序结束之后由系统释放。
      • 程序代码区:
        • 存放函数体的二进制代码。
      • 栈区:
        • 栈区,由编译器自动分配/释放内存空间,存放函数的参数值以及局部变量。
        • 局部变量作用域:从局部变量定义处开始,直到所在函数结束处
        • 局部变量生命周期:程序运行到函数结束处,该变量内存被释放
      • 堆区:
        • 堆区,用来分配动态内存区,操作系统提供了malloc等内存分配机制给程序员进行内存的申请分配,当然也要由其进行内存的释放,若没有手动释放,程序结束时可能由OS回收。
    • 一些定义变量的小技巧:
      • 若需要定义一个全局变量,此时需要考虑该变量是否需要其他文件对其进行访问,如果没有这个需求,则可以定义为静态局部变量,降低模块间的耦合度
      • 若要定义一个只被一个函数访问的全局变量,则可以将该变量定义为该函数内的静态局部变量,只会初始化一次,来降低模块间的耦合度
    • 从网上找的一个很有代表性的code
    •  1 //main.cpp
       2 int a = 0;  //全局变量,全局初始化区
       3 char *p1;  //全局变量,全局未初始化区      
       4 
       5 int main(){
       6     int b;  //局部变量,栈区
       7     char s[] = "abc";//局部变量,栈区
       8     char *p2;//局部变量,栈区
       9     char *p3 = "123456";//局部变量,p3在栈区,“123456”在常量区
      10     static int c = 0;//静态变量,全局(静态)初始化区
      11     p1 = (char*)malloc(10);//malloc申请内存,存储在堆区
      12     p2 = (char*)malloc(20);
      13 
      14 }
  • 相关阅读:
    2020杭电HDU-6756多校第一场Finding a MEX(图的分块)
    2020杭电HDU-6768多校第二场Lead of Wisdom(暴力DFS)
    牛客-Matrix(二维Hash-矩阵匹配)
    牛客-白兔的字符串(Hash+二分)
    2020杭电HDU-6768多校第二场The Oculus(假斐波那契数列真Hash)
    2020杭电HDU-6767多校第二场New Equipments(三分+费用流)
    使用 xmllint 验证 odoo xml文件
    odoo 的时差 坑
    请问如何突破”所选文件超出了文件的最大值设定:25.00 Mb“限制
    仓库打包作业超出分拣单数量时,发警报邮件
  • 原文地址:https://www.cnblogs.com/danielStudy/p/6582217.html
Copyright © 2020-2023  润新知