IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++ static -> 正文阅读

[C++知识库]c++ static

static 修饰局部变量

在函数内定义的静态成员变量,其作用域与普通局部变量一样,但是生命周期与整个程序一致。
对基本类型的静态局部变量若在声明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。

static 修饰全局变量

静态全局变量的作用域只能是当前文件,而非静态的全局变量的作用域是整个程序(也就是各个源文件内都是有效的)

static 修饰函数

可以限制此函数的作用域只是当前文件。
使用静态函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。

static 修饰类内数据成员

  • 静态数据成员和普通数据成员一样遵从public, protected, private 访问规则
  • 静态成员变量保存在全局数据区,不属于任何实例,而是属于类本身,可以通过类名直接访问。
  • 优点是可以实现信息隐藏

static 修饰类内成员函数

static成员函数服务于整个类,而不属于任何对象,不隐含this指针,**它无法访问实例的no-static数据成员,也无法访问no-static成员函数,它只能调用其余的静态成员函数。**总之就是非静态可以访问静态,静态只能访问静态,但是运行速度会有提升

程序内存图

程序内存主要分为四个区

由低地址到高地址依次为:

  • 正文段: CPU执行的机器指令部分
  • 全局数据区:又分为初始化数据段和未初始化数据段,保存的是全局变量和静态变量
  • 堆区:由程序员分配和管理
  • 栈区:编译器自动分配释放管理。局部变量每次函数调用时返回地址、以及调用者的环境信息(例如某些机器寄存器)都存放在栈中。

重点(这个部分我也很困惑,还没有解决)

已知static修饰的变量是保存在全局

所有函数在内存中的生存期都是整个程序运行期。内联的函数才是避免压栈的。可以用 inline 修饰来提示编译器内联,但 inline 不是强制的,有时编译器也会自动把可内联的较短函数内联。static 函数压栈和非 static 几乎无区别,仅有区别是类成员函数若为 static ,则压栈时不会传递 this 指针。

函数体是和静态变量一样存储在静态存储区,但不论如何,函数调用时都要进行压栈(将实参,函数中的局部变量,函数指针,返回指针一系列数据作为一个函数调用压栈)。但函数体本身不会包含在这个函数调用当中,而是以函数指针的形式引用。

从 C/C++ 语言的角度出发,只要了解对象的存储区分为静态存储(static storage)、自动存储(automatic storage)和动态分配存储(allocated or dynamic storage)就可以了。如果和操作系统的概念结合起来,自动存储区对应着栈(stack),动态分配存储区对应着堆(heap),静态存储区又可细分为 .bss、.data、.rodata 等段(section)。

参考资料

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:04:24  更:2022-03-16 22:06:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:55:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码