C 和 C++ 中静态变量存储在哪里?

2023-11-21

静态变量存储在可执行文件的哪个段(.BSS、.DATA、其他)中,以便它们不会发生名称冲突? 例如:


foo.c:                         bar.c:
static int foo = 1;            static int foo = 10;
void fooTest() {               void barTest() {
  static int bar = 2;            static int bar = 20;
  foo++;                         foo++;
  bar++;                         bar++;
  printf("%d,%d", foo, bar);     printf("%d, %d", foo, bar);
}                              }

如果我编译这两个文件并将其链接到重复调用 fooTest() 和 barTest 的 main,则 printf 语句独立递增。这是有道理的,因为 foo 和 bar 变量是翻译单元的本地变量。

但是存储分配在哪里呢?

需要明确的是,假设您有一个可以输出 ELF 格式文件的工具链。于是,我believe那里has在可执行文件中为这些静态变量保留一些空间。
出于讨论目的,我们假设我们使用 GCC 工具链。


您的静力学去向取决于它们是否零初始化. 零初始化静态数据进入.BSS(以符号开头的块), 非零初始化数据进入.DATA

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

C 和 C++ 中静态变量存储在哪里? 的相关文章

  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 计算另一个表达式中的 C# 表达式

    我想在另一个表达式中使用一个表达式 Expression
  • 在 omp 并行 for 循环中使用 unique_ptr 会导致 SEG.FAULT

    采取以下代码 include
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • 如何对 NServiceBus.Configure.WithWeb() 进行单元测试?

    我正在构建一个 WCF 服务 该服务接收外部 IP 上的请求并将其转换为通过 NServiceBus 发送的消息 我的单元测试之一调用Global Application Start 它执行应用程序的配置 然后尝试将 Web 服务解析为 验
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • 从BackgroundWorker线程更新图像UI属性

    在我正在编写的 WPF 应用程序中 我有一个 TransformedBitmap 属性 该属性绑定到 UI 上的 Image 对象 每当我更改此属性时 图像就会更新 因此显示在屏幕上的图像也会更新 为了防止在检索下一张图像时 UI 冻结或变
  • 逆向工程 ASP.NET Web 应用程序

    我有一个 ASP NET Web 应用程序 我没有源代码 该 bin 包含 10 个程序集和一个 compiled 文件 我在 App Code dll 上使用 Reflector 它向我显示了类和命名空间之类的东西 但它太混乱了 有没有什
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC

随机推荐

  • 基于“Accept”标头的网页有条件服务?

    据我所知 您可以通过以下方式通过 Express 提供静态内容 app use express static dirname public html 但是 我试图根据响应发送的 Accept 标头来明确更改其提供的内容的呈现方式 通常 我拥
  • 使用 Rails 运行多个后台并行作业

    在我的 Ruby on Rails 应用程序中 我需要并行执行 50 个后台作业 每个作业都会创建到不同服务器的 TCP 连接 获取一些数据并更新活动记录对象 我知道执行此任务的不同解决方案 但其中任何一个都是并行的 例如 delayed
  • UTF-8 字符的 Html2canvas 图像捕获问题

    我想捕获我的网页 为此我找到了 html2canvas 当我如下所示使用时 我的 UTF 8 波斯语 字符遇到麻烦 并且这个方向被破坏 如您所见 HTML div span span div JavaScript document read
  • 如何让 kestrel Web 服务器监听非本地主机请求?

    我已将我的 c asp net 5 mvc 6 应用程序部署到 Windows 2008 服务器 我已经火力全开dnx web它正在侦听端口 5000 并且从本地计算机访问时工作正常 如何让它监听非本地主机请求 附 这question与此不
  • 如何实现一个工厂有多个交换机?

    我想实现一个工厂函数来创建对象 我的对象模板如下所示 template
  • 如何在 C 中实现循环缓冲区?

    我需要一个固定大小 在创建时可以在运行时选择 而不是编译时选择 的循环缓冲区 它可以容纳任何类型的对象 并且需要very高性能 我认为不会出现资源争用问题 因为尽管它处于多任务嵌入式环境中 但它是一个合作环境 因此任务本身可以管理它 我最初
  • XSLT:循环一次选择两个元素

    我有一堆 xml 文档 作者选择在其中表示一组笛卡尔点 如下所示
  • 如何读取正在使用的文件? [复制]

    这个问题在这里已经有答案了 我有一个小问题 我有一个应该每天解析日志文件的工具 不幸的是这个日志文件正在被写入日志的进程使用 我无法阻止它 第一次尝试是创建该文件的副本 但这也不起作用 有什么方法可以让我读取日志文件的当前文本 即使它已经在
  • RPM 有条件 可能需要在规格文件中

    正如主题所读 我想知道是否可以在 RPM 规范文件中使所需的包依赖于某个条件 例如 如果在安装目标上 则检查 shell 语句 例如主机正在使用绑定接口 并且仅当要求生效时 作为您最初问题的答案 是的 这是可能的 但是您可以实现的内容取决于
  • 设置图像最大尺寸

    我需要设置图像的最大高度和宽度 img 标签 例如 最大尺寸为 400x400 px 因此如果图像尺寸小于此尺寸 则它将按原样显示图像 如果尺寸大于此尺寸 则应将其压缩到此尺寸 我怎样才能在 html 或 javascript 中做到这一点
  • 在 rake 任务中打印到屏幕

    我有一个长时间运行的 rake 任务 我时不时地在屏幕上打印更新 让我知道任务已经完成了多少 puts Almost there 我的问题是所有的 put 语句似乎都缓冲在某处 并且在任务完成之前不会打印到屏幕上 此时 它们将被一次性打印出
  • android listview 滚动后显示错误数据(自定义适配器)

    我有一个奇怪的问题让我发疯 在我的 android 应用程序中 我定制了自己的从 ArrayAdapter 扩展的适配器 我添加适配器的 ListView 的项目可以是标记文本 不可编辑 可编辑文本或微调器 疯狂的是 当我滚动 ListVi
  • 移动语义不完整吗?

    在复制效率低下的情况下 移动语义会取代复制语义 复制语义完全处理可复制对象 包括 const 对象 C 11 中已经存在大量不可复制的对象 例如 std unique ptr 这些对象完全依赖于移动语义 因为从对象移动允许使其无效 这对于像
  • 错误:向量内存已耗尽(达到限制?)

    我之前保存了一个 2 8G RData 文件 现在我尝试加载它 以便我可以再次处理它 但奇怪的是 我不能 它给出了错误 错误 向量内存已耗尽 达到限制 这很奇怪 因为我之前工作得很好 但改变的一件事是我升级到了最新版本的 R 3 5 0 我
  • 413 请求实体太大 - Web API

    我在尝试将数据从 Web 应用程序 netfx 4 6 1 发送到我的 Web api net core 3 1 时遇到 413 问题 在下面的代码中 我发送了一个列表 其中包含图像的字节数据以及构建文件所需的附加数据 预期输出是返回包含新
  • 使用 annotate 将粗体女性符号添加到 ggplot2

    我正在尝试在我的情节中使用女性符号 它非常微弱 嗯 在我的实际图表上看起来很微弱 所以我希望将其变成粗体 df lt data frame x c 0 1 y c 0 1 ggplot df aes x y geom point theme
  • Heroku 和 ip 掩码

    我正在构建一个购物网站 该网站使用允许信用卡付款的服务 tranzilla 该服务需要一个 IP 或 IP 掩码 以便允许请求 通过套接字 问题是我使用 heroku 作为托管 它是去中心化的 有什么办法可以做到这一点吗 除了购买自定义 s
  • Python:有条件地从列表中删除元素

    假设我有一个元组列表 x 1 2 3 4 7 4 5 4 在共享第二个元素的所有元组中 我想保留具有最大第一个元素的元组 y 1 2 7 4 在 Python 中实现这一目标的最佳方法是什么 感谢您的回答 如果有区别的话 元组可以是二元素列
  • 如何在 Android 上切换夜间模式和白天模式主题? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我想使用 设置 共享首选项 在 Android 应用程序中设置夜间模式和白天模式主题 如
  • C 和 C++ 中静态变量存储在哪里?

    静态变量存储在可执行文件的哪个段 BSS DATA 其他 中 以便它们不会发生名称冲突 例如 foo c bar c static int foo 1 static int foo 10 void fooTest void barTest