zoukankan      html  css  js  c++  java
  • 内存

    • 内存结构:
      • 静态、全局内存:
        • 静态变量和全局变量存储在一块内存中,内部又分为初始化区和未初始化区,分别存储初始化和未初始化的全局、静态变量。
        • 全局变量作用域:全局作用域(全局变量只需要在一个源文件中定义,即可运用于所有的源文件,使用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 }
  • 相关阅读:
    Eclipse-将svn上的项目转化成相应的项目
    Maven-在eclipse创建maven项目
    Html-Css-div标签嵌套浮动div标签时无法撑开外部div的解决
    Html-Css-a标签的使用
    Jquery-获取父级元素parent
    Jquery-获取子元素children,find
    Jquery-获取同级标签prev,prevAll,next,nextAll
    Jquery-处理iframe的高度自适应
    Html-Css-iframe的自适应高度方案
    Html-Css-iframe的使用
  • 原文地址:https://www.cnblogs.com/danielStudy/p/6582217.html
Copyright © 2011-2022 走看看