C++ 中的全局变量是存储在堆栈、堆还是两者都不存储?

2024-01-26

最初我很确定正确的答案一定是“都不是”,因为全局变量存储在数据内存中,但后来我找到了 Robert Lafore 的这本书,名为“C++ 中的面向对象编程”,它明确指出,根据C++标准,全局变量存储在堆上。现在我很困惑,无法真正弄清楚所提出问题的正确答案是什么。

为什么全局变量要存放在堆上?我缺少什么?

EDIT: 本书链接 https://docs.google.com/file/d/0B21HoBq6u9TsUHhqS3JIUmFuamc/view- 书籍第 205 页 / Google Drive 第 231 页


这本书第 205 页是这么说的:

如果您熟悉操作系统体系结构,您可能有兴趣知道局部变量和函数参数存储在堆栈上,而全局变量和静态变量存储在堆上。

这绝对是书上的错误。首先,我们应该从存储持续时间来讨论存储,就像C++标准那样:“堆栈”指的是自动存储持续时间,而“堆”指的是动态存储持续时间。 “栈”和“堆”都是分配策略,通常用于实现具有各自存储持续时间的对象。

全局变量具有静态存储期限。它们存储在与“堆”和“堆栈”分开的区域中。全局常量对象通常存储在“code”段中,而非常量全局对象存储在“data”段中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 中的全局变量是存储在堆栈、堆还是两者都不存储? 的相关文章

随机推荐

  • 花栗鼠碰撞检测

    我对花栗鼠完全陌生 而且我刚刚使用它几天 所以我猜这是非常明显的事情 但是我找不到任何相关文档 Chipmunk 中是否有任何回调或方法可以告诉您 2 个给定的形状发生了碰撞 如果不是 最好的方法是简单地在精灵上使用 cgrect cont
  • iOS 6 自定义 URL 方案启动图像错误

    我已经在我的应用程序中实现了自定义 URL 方案 另外 我使用以下命令对启动图像有不同的名称UI启动图像文件键入 info plist 文件说 如果您的应用程序支持一个或多个自定义 URL 方案 它还可以 为每个 URL 方案提供自定义启动
  • 无法从外部机器连接到kafka

    我从 Apache Kafka 开始 当我尝试从外部机器连接时遇到问题 使用下面的配置 如果应用程序和 docker 在同一台机器上运行 则一切正常 但是当我将应用程序放入机器 A 并将 docker 放入机器 B 时 应用程序无法连接 我
  • 在 ng-repeat 中生成 ng-model

    我一直在阅读一些主题 但找不到我所坚持的这个主题的解决方案 我正在尝试添加ng model inside NG 重复像这样的东西 span span
  • CUDA:是否可以将全部 48KB 片上内存用作共享内存?

    我正在 Windows 7 64 位 SP1 上使用 CUDA Toolkit 4 0 和 Visual Studio 2010 Professional 为 GTX 580 开发 CUDA 应用程序 我的程序比典型的 CUDA 程序更占用
  • 创建条带摘要报告

    我最近将付款处理切换到 Stripe 我现在需要为我们的财务部门创建一份报告 显示指定日期范围内的交易汇总 我已经开始创建一个简单的 PHP 网页 并使用 Stripe PHP 库 它将提供以下摘要 交易数量 交易金额 退款次数 退款金额
  • 使用 Mongoose 时出现 MongoDB 弃用警告

    我正在使用猫鼬版本5 2 13 我想是最新的 但是当我尝试执行 findOneAndUpdate 查询时 Mongo 会抛出弃用警告 DeprecationWarning collection findAndModify 已弃用 使用 改为
  • Android OpenCV:无法 dlopen 相机包装库

    如同OpenCV 2 3 如何从Android相机捕获帧 https stackoverflow com questions 7198912 opencv 2 3 how to capture frames from android cam
  • 如果我单击 overrideredirect 窗口并移动它(窗口),如何获得更好的窗口位置?

    当我单击窗口时 在我的例子中 当我单击self top frame and self app name 要移动它 窗口位置将更改为 0 x 和 y 坐标 所以如果我想移动窗口 窗口就会移动到右侧 我可以修复它 以便窗口不会移动到右侧 或从我
  • Javascript使用datejs解析RFC3339日期时间

    我在使用来自 Google Calendar API 的日期格式的 datajs 时遇到问题 我认为日期时间格式是 RFC3339 这是从日历 api 返回的示例日期时间 2012 01 05T08 45 00Z 这是来自 datejs 文
  • 使用 SQLAlchemy 和 PostgreSQL 进行 Flask 单元测试耗尽数据库连接

    我正在使用 Flask SQLAlchemy 和 PostgreSQL 运行一套相当简单的测试用例 使用应用程序工厂 我定义了一个基本单元测试类 如下所示 class BaseTestCase unittest TestCase def s
  • Ionic devapp 只是搜索

    我在使用 Ionic DevApp 应用程序时遇到问题 我使用它在浏览器中打开的 ionicserve c 命令 但在我的设备上它只是寻找 侦听网络上的应用程序 它没有出现在我的设备上 但是我已经在其他 2 台设备上进行了测试 并且项目出现
  • 如何禁用 jquery 数据表中的显示条目属性

    我刚刚开始使用 jquery 我使用 jquery 数据表插件来启用表视图 我需要禁用显示条目属性 谁能帮助我在哪个js中我需要禁用该属性 我已关注此链接 但没有帮助 不知道要修改哪个js here http datatables net
  • QTreeView内存消耗

    我现在正在测试 QTreeView 功能 我对一件事感到惊讶 看来 QTreeView 内存消耗取决于项目计数 O O 这是非常不寻常的 因为这种类型的模型视图容器仅跟踪正在显示的项目 其余项目都在模型中 我用一个简单的模型编写了以下代码
  • Android 证书已更改?

    我最近格式化了我的计算机并更新到 Windows 7 我备份了我的密钥库并尝试用它签署我的 apk 但它给了我一个错误 说我的证书将在 22 年后过期 这仅低于市场上传 apk 的要求 所以现在我陷入无法更新我的应用程序 这怎么发生的 有没
  • Emacs 打开最近的文件很慢!

    直接打开文件时速度很快 但是当我打开最近激活的文件时 在我的文件中添加以下行 emacs require recentf recentf mode 1 setq recentf max menu items 25 global set ke
  • Actionscript 3:如何从外部类访问舞台上的元素?

    我的 as 文件中有一个外部类 我的问题是我无法访问舞台上的元素 像 stage txtfield text 或 this parent txtfield text 这样的代码不起作用 txtfield 是动态文本字段的实例名称 这在一定程
  • Laravel 注册表单上的自定义验证

    我目前正在努力对注册表进行一些验证 基本上 当用户注册时 它会检查他们输入的唯一代码是否有效 如果无效则不允许他们注册 但在我从中读取的代码表中 代码上也有一个到期日期 我需要在认为有效后再次检查到期日期尚未过去 换句话说 它不大于现在 我
  • 编写一个返回值的 jQuery 插件

    我正在编写一个 jQuery 插件 在某些情况下可以存储一些数据 我想以一种非常灵活的方式编写它 我可以更改输入参数来获取插件存储的一些值 解释 当我打电话时 any myPlugin 我的插件初始化创建一个div还有一些a里面 单击一个a
  • C++ 中的全局变量是存储在堆栈、堆还是两者都不存储?

    最初我很确定正确的答案一定是 都不是 因为全局变量存储在数据内存中 但后来我找到了 Robert Lafore 的这本书 名为 C 中的面向对象编程 它明确指出 根据C 标准 全局变量存储在堆上 现在我很困惑 无法真正弄清楚所提出问题的正确