C++存储类型

Win11/Win10系统下,Proe5.0 M280终极版保姆级安装与激活指南(含SSQ补丁避坑) 本文提供Win11/Win10系统下Pro/E 5.0 M280终极版的详细安装与激活指南,涵盖环境配置、SSQ补丁应用及常见问题解决方案。通过系统调整、分步安装和性能优化,确保软件在现代操作系统上的稳定运行,特别适合机械设计用户参考。 阅读详情

前段时间查到这方面的东西,看这里讲的不错,就翻译了,第一次尝试 :)

原文地址:http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=28

 

 

内存管理

         在 C++ 中,一种存储类别 (storage class) 定义了某个标志符的内存属性。同样它也决定了一个对象的内存生存期 (storage duration):  自动存储生存期 (automatic storage duration) , 线程存储生存期 (thread storage duration) ,静态存储生存期 (static storage duration) , 和空闲内存 (free store) 。每种存储类别规定了不同的内存使用限制,并表示不同的初始化,生命生存期,作用域和链接语义。决定一个标志符存储生存期的因素有:

 

1>     出现在标志符声明前面的存储类型说明符 (e.g., static, thread_local, extern, register) 。

2>     上下文 ( 比如说,定义在命名空间里的用户定义类型以及函数的参数 )

3>     标识符类型 ( 一个函数,一个数据成员等等 ) 。

 

下面的章节将解释不同 C++ 存储生存期的区别,讨论他们的使用并列举他们在 C ,旧标准 C++ 和 C++09 之间的区别。

 

自动存储

         内存生存期是对象的一个属性,它定义了这个对象在内存中的最小生存时间。内存生存期由创建对象的构造函数决定,包括存储类型标志符。最常见的存储生存期是自动存储生存期。 因为在堆栈上分配的对象是自动分配和自动释放的,所以具有自动存储生存期。下面的对象具有自动存储属性:

 

1>     没有被显式声明为 static, extern 或者 thread_local 的局部变量

2>     声明带有 auto 存储说明符的局部变量 ( 适用 C 的所有版本和除了 C++09 之外的 C++ 版本 )

3>     声明带有 register 存储说明符的对象

4>     函数参数

5>     临时对象

 

存储类型标志符

         不要混淆了存储生存期与存储类型标志符。 C++09 存储类型标志符有:

1>     register

2>     static

3>     thread_local

4>     extern

5>     mutable

 

与 C++09 之前的存储类型说明符列表有点不同:

 

1>     register

2>     static

3>     auto

4>     extern

5>     mutable

 

在 C 语言中,存储类型说明符有:

 

1>     register

2>     static

3>     auto

4>     extern

 

自动存储生存期

         下面的代码包括了自动存储生存期类型的不同声明,对象和变量。

   

 

 

         自动存储生存期类型的对象,简称自动对象,是在进入一个块或一个函数时自动创建的。当程序退出他们所声明的块或者函数时,他们就会被销毁,并且其内存会被自动回收。因此,在一个函数或者块的入口处会创建其自动对象。自动对象和非类对象的默认值都是不确定的。自动对象不可链接,不能从不同的 编译单元 (translation unit) 引用自动对象,并且他们只能在声明的作用域内可见。

         C++09 标准不再将 auto 视为一个内存类型标志符。因此,在 C++09 的代码里不能使用 auto 来指定自动内存生存期。因而 C++09 中自动存储生存期隐藏于上下文中。 auto 关键字在 C++09 中仍然存在,但是意义已经改变,所以程序员必须小心:使用了 auto 作为存储类型的旧版 C 和 C++ 代码编译会出错。

 

Register 存储类型标志符

         Register 存储类型标志符仅被用来修饰块中声明的对象或者函数参数。声明一个带有 register 标志符的对象暗示存取此对象会尽可能的快。例如,在一个双重循环里声明一个 register 类型的计数器可能会被存储在 CPU 的 register 里而不是内存里。类似地,一个声明成 register 类型的类对象可能会被存储到 cache 里以便快速存取。这种 register 请求的有效性从某种程度上与实现相关。现在, C 或者 C++ 里已经几乎不使用 register 类型了。大部分编译器不会理会用户的 register 变量和对象的请求。相反,编译器会自动做出 register 类型的选择。 ISO C 规定用户不能获得 register 对象的地址。在 C++ 中可以这么做,但是这样会使 register 类型请求失效(对象将被存到内存中)。在其他所有方面(如初始化,生命生存期, 作用域)带有 register 存储类型的对象和自动对象具有同样的语义。


Mutable 存储类型标志符

         Mutable 标志符修饰一个 const 类数据成员会使其 const 属性无效并且会允许更改 mutable 类型的类数据成员,尽管对象中其余的成员都是 const 类型的。换句话说,就算是 const 对象,其 mutable 成员通常是可以改变的。

 

 

         mutable 标志符只能被用在类数据成员的名字前,并且不能和 const 或者 static 同时使用,也不能用来修饰引用变量。

例如

 

 

         成员 p 的声明中, mutable 标志符修饰指针,而 const 标志符修饰被指针指向的 int 数据。反之, q 的声明则是无效的,因为指针被同时声明为 const 和 mutable 了。类似地,引用变量 r 的声明是无效的,因为引用变量不可变。

 

静态存储生存期和线程存储生存期

         全局对象和在 namespace 作用域中的对象,类的静态数据成员,以及函数中驻留在静态存储区的局部静态对象。一个带有静态存储生存期属性的对象在程序的整个执行期间都会驻留在相同的内存中。每一个这种对象在程序的生命生存期内只创建一次。静态数据默认全部被初始化为 0 。带有一个自定义构造函数或者一个显式动态初始器的静态对象都将经历一个二次初始化阶段,我们称之为动态初始化。

 

         在一个函数中声明的对象,其作用域就被限制在那个函数中。下面的例子中有些静态存储的对象:

 

extern 存储类型标志符

         extern 标志符只能用来修饰对象和函数。 extern 标志符不能被用在类成员或者函数参数的声明中。声明成 extern 的标识符具有外部链接性,意味着他们在同一个程序的所有 编译单元中都是可见的。

         在 namespace 作用域中声明的不带存储类型标志符的名称具有外部链接性,除非其由于被声明过而已经具有内部链接性,或者被声明为 const 类型。被声明为 const 类型的对象和未被显式声明为 extern 的对象具有内部链接性,意味着他们只在他们所声明的 编译单元内可见。

         注意 extern 关键字还可以用在别处,他也可以被用在模板的实现初始化和链接标识中,但是此时 extern 已经不再是一个存储类型标志符。

 

thread_local 存储生存期

         thread_local 标志符表明其修饰的对象或者引用具有线程存储生存期。 thread_local 只能用来修饰命名空间中的对象或者引用的名字,以及块作用域中已经被指定为 static 存储类型的对象和引用。 thread_local 存储类型是 C++09 中的新特征。在此不详细讨论。

 

 

自然语言处理:稀疏向量表示 稀疏向量表示是指运用特定的方法和技术,将数据(如文本、图像、信号等)转化为向量形式,且该向量具有大部分元素值为零,仅少数元素值非零的特征,以此来实现对数据的高效存储、处理和分析。 阅读详情

相关推荐

人形机器人系列——硬件介绍

人形机器人是多领域交叉技术的产物,主要由三大系统组成:感知系统、决策系统和执行系统。感知系统感知系统是人形机器人获取外界信息的途径,主要由各种传感器组成。其中,视觉传感器用于获取图像信息,如摄像头、激光雷达等;触觉传感器用于感知触碰和压力,如力/力矩传感器、声学传感器等。这些传感器收集到的信息为机器人的决策和执行提供基础。决策系统决策系统是人形机器人的大脑,负责处理和决策各种信息。它由芯片和算法组成。芯片是硬件基础,提供计算能力;算法是软件基础,用于处理和分析传感器收集到的信息,并做出相应的决策。执行系统。

liangwqi的博客 1万+

c++中的存储类型

c++中的存储类型 存储类型是从变量的存在时间(即生存期)来划分变量。变量的存储类型可分为静态存储方式和动态存储方式。对于动态存储变量,当程序运行到该变量处时才为其分配存储空间,当程序运行到该变量所在作用域的结束处时自动收回为其分配的存储空间,因此它的生存期为所在作用域。 在程序开始就执行就为其分配存储空间,直到程序结束时,才收回变量的存储空间,这种变量称为静态存储空间,其生命周期为整个程

小龙王2010 1785

全面分析总结解决Could not transfer artifact org.apache.maven.plugins等此类问题的方法

全面分析总结解决Could not transfer artifact org.apache.maven.plugins,Could not transfer artifact xxx from/to xxx等此类问题的方法

ccjjjjdff的博客 1万+

C/C++存储类别

本文介绍 C/C++ 中的存储类别。所谓的“存储类别”究竟是什么意思? 存储类别主要指在内存中存储数据的方式,其大致牵涉到变量的三个方面 —— 作用域、链接性和存储期,也就是说这三个方面决定了存储类别。下面先解释这三个概念,再介绍在 C/C++ 中的表示形式。 存储类别定义 作用域 (scope) 描述程序中可访问变量的区域,主要有块作用域 (block scope) 变量和 文件作用域 (file scope) 变量,平常我们也分别用局部变量和全局变量来指代这两者。这里需要注意的是,在 C/C++

Naunyang的博客 2046

告别‘小爱同学’:用ESP32-S3和esp-sr SDK,从零打造一个离线语音助手(含完整代码)

本文详细介绍了如何利用ESP32-S3芯片和esp-sr SDK从零构建一个离线语音助手,涵盖硬件选型、声学设计、SDK配置及低功耗优化等关键步骤。通过实战案例和完整代码,帮助开发者实现自定义唤醒词和命令词,打造低成本、高隐私的本地语音控制解决方案。

weixin_29041195的博客 371

eNSP-交换机VLAN配置

VLAN

乌托托的博客 8809

C/C++开发,opencv基于FileStorage读写文件介绍及示例

C/C++开发,opencv基于FileStorage读写文件介绍及示例,介绍FileStorage类的信息及读写函数,通过读写一个yml文件来展示FileStorage的应用。

技术需要分享 3092

SUMO使用教程(一)

本人的sumo视频入门课程,希望支持哦。https://edu.youkuaiyun.com/course/detail/25834 SUMO是一款交通仿真软件,其余可自行百度。教程一主要展示一下如何运行一个仿真实例。当然,这只是实现方法中的一种。 准备: 1.SUMO软件 2.osm地图文件 SUMO可去官网下载,解压后就可以使用,图形界面软是在解压后bin文件夹下的sumo-gui.exe。...

lyx的专栏 3万+

C++——存储方式

文章目录内存模型与命令空间单独编译储存持续性、作用域、连接性作用域和连接自动存储连续性1. 自动变量初始化2. 自动变量和栈3. 寄存器变量静态持续变量5种变量储存方式静态变量的初始化静态持续性、外部链接性静态持续性,内部链接性静态存储持续性,无连接性命名空间 内存模型与命令空间 单独编译 C++也允许鼓励程序员将组件函数放在 ** 独立文件中 ** 。 将 ** 一个程序放在多个文件中 ** ,将引出新的问题:不能简单的以main()之后的虚线为界,将原来的文件分为两个。问题在于 < u >

mankeywang的博客 4998

HQChart实战教程19 - PC端分时图定制tooltip

HQChart实战教程19 - PC端分时图定制tooltip序效果步骤1. 创建一个外部tooltip的div2. 注册标题绘制事件3. 标题绘制回调函数格式说明eventdataobjtooltip显示函数HQChart代码地址 序 hqchart分时图是不带tooltip, 如果我们需要在PC端页面显示tooltip,我们可以通过注册绘制标题事件,来自己做一个div显示数据。 参考教程HQChart实战教程7-自定义显示手势点击K线显示信息 效果 步骤 1. 创建一个外部tooltip的div 在外

小银 2447

【OS】AUTOSAR OS系统调用产生Trap的过程详解

AUTOSAR OS系统调用产生Trap的过程详解

qq_36056498的博客 2439

C++变量的存储类别(动态存储、静态存储、自动变量、寄存器变量、外部变量)

动态存储方式与静态存储方式 我们已经了解了变量的作用域。作用域是从空间的角度来分析的,分为全局变量和局部变量。   变量还有另一种属性——存储期(storage duration,也称生命期)。存储期是指变量在内存中的存在期间。这是从变量值存在的时间角度来分析的。存储期可以分为静态存储期(static storage duration)和动态存储期(dynamic storage dur

妙心的专栏 2328

一种基于机载LiDAR点云电力线自动提取方法

文章目录一、引言二、算法实现2.1实现步骤2.2实现代码 一、引言 二、算法实现 2.1实现步骤 (1)首先采用首先采用高程滤波方法去除地面点和低矮地物点,滤波后的点云数据中除电力线点云外还含部分杆塔点、高植被点和噪声点。 (2)根据点云空间维度特征提取电力线点,使用空间密度聚类的方法实现单根电力线精确分离。 2.2实现代码 在这里插入代码片 ...

dayuhaitang1的博客 5172

C++---存储类型

💎💎C++中的存储类型有auto,register,static,extern,mutable,thread_local (C++11),存储类型说明了变量要在进程中分配内存空间位置,可以为变量分配内存存储空间的有数据区、BBS区、栈区、堆区。本文主要介绍C++中的存储类型。代码区:存放CPU执行的机器指令,代码区是可共享,并且是只读的。数据区:存放已初始化的全局变量、静态变量(全局和局部)、常量数据。BBS区:存放的是未初始化的全局变量和静态变量。

WSH2012ffff的博客 1121

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++:存储类型

在C++中我们定义变量时这个样子的: 存储类型 数据类型 常量名/变量名 = 初始化值; 本篇文章就来看看这个“存储类型”: --------------------------------------------------------------------------------------------------------------------------------------

GROWTH 748

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C++ 存储类型

C++中的存储类型有auto,register,static,extern,mutable,thread_local (C++11),存储类型说明了变量要在进程中分配内存空间位置,可以为变量分配内存存储空间的有数据区、BBS区、栈区、堆区。本文主要介绍C++中的存储类型。 原文地址:C++ 存储类型 ...

亮亮的专栏 835

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++变量的4种存储类型

1、变量的存储类型 所有的数据都有两种类型,一种是数据类型,一种是存储类型。 数据类型:如int,float等 存储类型:四种存储类型的变量,自动变量(auto)、静态变量(static)、外部变量(extern)、以及寄存器变量(register)。 auto - 函数中所有的非静态局部变量。 register - 一般经常使用的变量(如一变量需计算几千次)可以设置成寄存器变量,register...

WHJwhj947841907的博客 1430

C/C++语言中的变量的4种存储类型

所有的数据都有两种类型 (1)数据类型: : 如 int,float 等。 (2)存储类型: : 总共有四种存储类型的变量,分别为自动变量(auto)、静态变量(static)、外部变量(extern)以及寄存器变量(register)。 1、o auto - - 函数中所有的非静态局部变量。 2、 register - - 一般经常被使用的的变量(如某一变量需要计算几千次)可以设置成寄存器变量register 变量会被存储在寄存器中,计算速度远快于存在内存中的非 register 变量。 3、 stati

ZengYong12138的博客 2601

C++变量存储类型

存储类型是从变量的存在时间(即生存期)来划分变量。变量的存储类型可分为静态存储方式和动态存储方式两大类。对于动态存储变量,当程序运行到该变量处时才为其分配存储空间,当程序运行到该变量所在作用域的结束处时自动收回为其分配的存储空间,因此它的生存期为所在作用域。在程序开始就执行就为其分配存储空间,直到程序结束时,才收回变量的存储空间,这种变量称为静态存储空间,其生命周期为整个程序执行的生命周期。

唐俊鑫的专栏 1025

c/c++编程学习:变量的存储类型

变量存储类型 前面我们说了,声明变量时用如下类似的形式: int num; float total; 它们都没有存储类型修饰符,我们在声明时也可以通过存储类型修饰符来告诉编译器将要处理什么类型的变量。 存储类型有以下四种:自动(auto)、静态(static)、外部(extern)、寄存器(regiser)。 自动存储类型 自动存储类型修饰符指定了一个局部变量为自动的,这意味着,每次执行到定义该变量的语句块时,都将会为该变量在内存中产生一个新的拷贝,并对其进行初始化。 实际上,如果不特别指明

C语言C++学习俱乐部:765860056 924

【C/C++知识点】变量的4种存储类型

📣专栏定位:整理一下 C++ 相关的知识点,供大家学习参考~🎏唠叨唠叨:在这个专栏里我会整理一些琐碎的 C++ 知识点,方便大家作为字典查询~

Newin2020的博客 573

cpp存储类型说明符(storage class specifier)

The storage class specifiers are a part of the decl-specifier-seq of a name’s declaration syntax. Together with the scope of the name, they control two independent properties of the name: its storage duration and its linkage. 存储类型说明符有以下几类: auto: register:

kking_edc的博客 1069

C++变量的四种存储类型

C++变量的四种存储类型 上节我们介绍了动态内存的使用。C++动态内存的分配、使用、释放以及内存泄漏 本节我们介绍四种存储类型。 数据类型: 如int, float, double等。在之前详细介绍过。C/C++输入与数据类型 存储类型,总共有四种: 自动变量(auto),静态变量(static),外部变量(extern)以及寄存器变量(register)。 auto变量 函数中所有使用的非静态局部变量。 #include <stdio.h> using namespace st

qq_44989173的博客 1578

c++存储类型

1、c++中的存储类型一般有静态存储、栈、和自动类型三种,一般默认值是为自动类型auto

向阳生长,为梦想而活 1036

C++— —变量的四种存储类型

C++变量的四种存储类型

m0_65635427的博客 349
上一篇: CreateThread, AfxBeginThread,_beginthread, _beginthreadex 区别
下一篇: wglShareLists使用简介
webScaler
博客等级 码龄20年 45粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值