2020-12-28C/C++学习00
请注意,本文编写于 701 天前,最后修改于 204 天前,其中某些信息可能已经过时。

目录


分段概念

分段概念

内存特性

  1. Write 写入
  2. Read 读取
  3. Execyte 执行
  4. Share 共用

一、块变量

复合语句
收编译器约束的局部变量

作用域

上面看得见下面,下面看不见上面

c
# include "stdafx.h"
# include <stdio.h>
# include <stdlib.h>

int main()
{
    //山顶规则
    int n = 8;
    {
        int m = n + 9;
        printf("%d\r\n",n);
        //m只在{}里
        printf("%d\r\n",m);
    }
    printf("%d\r\n",n);
    //看不见m
    printf("%d\r\n",m);
    system("pause");
    return 0;
}

生命期

函数调用开始到函数调用结束

访问限制

限制一个变量访问通常是用两种限制:

  1. 编译器的语法检查
  • 编译器限制过程中,可以使用内存下标运算,指针等访问不该访问到的内容。
  1. 操作系统访问限制,常见的内存访问异常C0000005

二、局部变量

作用域

函数调用开始到函数调用结束

生命期

函数调用开始到函数调用结束

三、全局变量

全局变量时编译时赋值

未初始化的全部变量和,已初始化的全局变量不存在一起。

所有未初始化区的变量都是默认0值。

可执行文件如果有已初始化的全局变量时,体积会变大,因为初始值占用了很多空间。

作用域

工程内各个源码文件处处都能访问

生命期

模块载入到模块卸载

使用场景

小规模开发,个人开发时可以使用
大团队协作谨慎使用,禁止使用, 命名谨慎

四、静态全局变量

跟全局一样,但加了编译器限制

静态全局变量就是为了解决全局变量的权利过大问题。

作用域

定义文件内可以访问

声明期

模块载入到模块卸载

五、静态局部变量

静态变量只初始化一次
静态局部变量实际上还是全局变量,存储区域是一样的

作用域

定义函数内可以访问

声明期

模块载入到模块卸载

六、名称粉碎

Name Mangling 是一种在编译过程中,将函数、变量的名称重新改编的机制。在 C++重载、namespace等操作符下,函数可以有同样的名字,编译器为了区分各个不同地方的函数,将各个函数通过编译器内定的算法,将函数改成唯一的名称。

Name Mangling翻译成中文意思为:名字修饰、名字改编等。

七、寄存区变量

  • 只有自动变量(或者形式参数)可以是寄存器变量,全局变量和静态局部变量不行。

  • 函数中的寄存器变量在调用该函数时占用寄存器存放变量的值,当函数结束时释放寄存器,该变量消失。

  • 由于计算机中寄存器数目有限,不能使用太多的寄存器变量。

  • 寄存器变量只限于int型、char型和指针类型变量使用。如果寄存器使用饱和时,程序将寄存器变量自动转换为自动变量处理。

本文作者:Na1r

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!