什么是 C/C++ 数据段和堆栈大小?

2024-03-21

我读到这取决于编译器和操作系统架构。如何在使用 GCC 作为编译器的 Linux 系统上找到数据段和堆栈最大大小?


让我和你一起实验一下:创建文件“test.c”,如下所示:

int main (void) { return 0; }

现在编译它,指定最大堆栈大小(只是为了轻松在映射文件中查找这个数字并确定符号名称,引用它):

gcc test.c -o test.x -Wl,--stack=0x20000 -Wl,-Map=output.map

确定数据大小很简单:

size -A -d test.x

你会得到这样的东西:

section           size         addr
.text             1880   4299165696
.data              104   4299169792
...

另外“objdump -h test.x”也可以正常工作,但结果更简洁。

这里有更多部分(不仅仅是代码和数据),但这里没有堆栈信息。为什么?因为堆栈大小不是 ELF 部分,所以只有在程序加载执行后才保留它。您应该从文件中的某些(依赖于平台的)符号中读取它,如下所示:

$ nm test.x  | grep __size_of_stack_reserve__
0000000000020000 A __size_of_stack_reserve__

毫不奇怪,大小是 0x20000,正如编译时所说的那样。

我通过查看编译期间生成的output.map 文件来确定符号名称。我建议你也从看它开始。

接下来,当您确实有一些未知文件 a.out 时,只需重复序列:

size -A -d a.out
nm a.out | grep __size_of_stack_reserve__

将平台相关符号替换为您在实验中确定的符号,如上所述。

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

什么是 C/C++ 数据段和堆栈大小? 的相关文章

  • 如何使用 zlib 制作 .zip 文件

    我正在阅读zlib的文档 它相当详细 但我读到了这一行 输出数据将位于zlib格式 与 gzip 或zip formats http www zlib net zlib how html http www zlib net zlib how
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • C# 正则表达式用于查找 中具有特定结尾的链接

    我需要一个正则表达式模式来查找字符串 带有 HTML 代码 中的链接 以获取文件结尾如 gif 或 png 的链接 示例字符串 a href site com folder picture png target blank picture
  • CultureInfo 的实例(来自相同的文化)根据操作系统而变化

    我有一个网站 上面写着这样的日期 CultureInfo cultureInfo CultureInfo GetCultures CultureTypes AllCultures FirstOrDefault c gt string Equ
  • 在 C# Winforms 应用程序中嵌入 Windows XP 主题

    我有一个旧版 C Windows 窗体应用程序 其布局是根据 Windows XP 默认主题设计的 由于需要将其作为 Citrix 应用程序进行分发 该应用程序现在看起来像经典主题应用程序 因为 Citrix 不鼓励使用主题系统服务 所以
  • 如何生成 appsettings..json 文件?

    我有一个 ASP NET Core 2 WebAPI 它将部署在以下环境中 INT QA STAGE 生产环境 基于上述 我需要有appsettings
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • 将带有 glut 的点击坐标添加到向量链接列表中

    我想创建一个向量链接列表 并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中 这些是我写的结构 typedef struct vector int x int y Vector typedef struct VectorLis
  • 如何在 C++ 中将 CString 转换为 double?

    我如何转换CString to a double在 C 中 Unicode 支持也很好 Thanks A CString可以转换为LPCTSTR 这基本上是一个const char const wchar t 在 Unicode 版本中 知
  • 从成员函数指针类型生成函子

    我正在尝试简化 通过make fn 预处理参数的函子的生成 通过wrap 对于 arity 的成员函数n 生成函子基本上可以工作 但到目前为止只能通过显式指定成员函数的参数类型来实现 现在我想从它处理的成员函数类型生成正确的函子 struc
  • libxml2 xmlChar * 到 std::wstring

    libxml2似乎将所有字符串存储在 UTF 8 中 如xmlChar xmlChar This is a basic byte in an UTF 8 encoded string It s unsigned allowing to pi
  • C++ 插件的“最适合”动态类型匹配

    我有一个几乎所有东西都是插件的架构 该架构以图形用户界面为基础 其中每个插件都由一个 表面 即用户可以通过其与插件交互的 UI 控件 表示 这些表面也是插件 每当添加新插件时 瘦主机都会自动确定哪个可用表面与其最匹配的 UI 如何在 C 中
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • tabcontrol selectedindex 更改事件未被触发 C#

    嘿伙计们 我有一个很小的问题 请参阅下面的代码 this is main load private void Form1 Load object sender EventArgs e tabAddRemoveOperator Selecte
  • asp.net网格分页的SQL查询

    我在用iBatis and SQLServer 使用偏移量和限制进行分页查询的最佳方法是什么 也许我添加该列ROW NUMBER OVER ORDER BY Id AS RowNum 但这只会阻止简单查询的数据访问 在某些情况下 我使用选择
  • ASP.NET JQuery AJAX POST 返回数据,但在 401 响应内

    我的应用程序中有一个网页 需要调用我设置的 Web 服务来返回对象列表 这个调用是这样设置的 document ready function var response ajax type POST contentType applicati
  • 在 C++17 中使用 成员的链接错误

    我在 Ubuntu 16 04 上使用 gcc 7 2 并且需要使用 C 17 中的新文件系统库 尽管确实有一个名为experimental filesystem的库 但我无法使用它的任何成员 例如 当我尝试编译此文件时 include
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne

随机推荐

  • Moment.js 月份差异

    我已经使用 moment js 有一段时间了 它使日期操作变得更加容易 但我有一个失败的特定案例 我不明白为什么 计算今天 2013 年 10 月 31 日 和 2014 年 2 月 1 日之间的差异时 月份差异返回为 2 尽管两个日期之间
  • JQuery:获取不包括嵌套标签的标签内容

    我有一些如下所示的 HTML span Text I m interested in span Other crap I don t care about span span 我希望获取跨度 A 的文本内容 不包括任何嵌套标签 即上例中跨度
  • Nestjs Mongoose 服务的单元测试

    我一直在试图弄清楚如何对 NestJS 服务进行单元测试 所以我写了一个规范文件来测试这些使用 mongoose 和 jest 的 NestJS 服务 规格文件如下 import Test TestingModule from nestjs
  • 如何获取MEF中的所有方法

    我有属性类 AttributeUsage AttributeTargets Method public class MethodGetterAttribute ExportAttribute 我在几个命名空间的方法中使用它 namespac
  • 使用reduce删除数组中的重复项

    我正在尝试从数组列表中删除重复项 我尝试执行此操作的方法是使用reduce 创建一个空数组 将所有未定义的索引推送到该数组上 但我收到错误 if acc item undefined TypeError Cannot read proper
  • 如何查看CK编辑器版本

    我的项目中有一个现有的 CK 编辑器文件夹 我怎样才能知道它的版本 有记录吗 只需在 config js 文件中发出如下警报 它就会给出值 alert CKEDITOR version 或者您可以直接在文件 ckeditor php4 ph
  • 是否可以将一个操作附加到 boost::spirit::rule 解析器,该解析器将解析结果分配给(尚)未知实例的成员?

    我试图从 boost spirit 规则定义的操作中引用 尚 未知实例的成员 因此在伪代码中 代替 双 参考 rN 1 我正在寻找类似的东西 X 像素 double ref X rN ppx 1 它的解决方法可能是一个简单的 语义操作 其参
  • Google Maps API v3 MapTypeId 作为变量

    设置谷歌地图类型时 map setMapTypeId google maps MapTypeId TERRAIN 我可以用包含字符串 TERRAIN SATELLITE 等的js变量替换 TERRAIN 吗 是的 这样称呼它 var map
  • AVPlayer 在模拟器上可以播放,但在真实设备上却无法播放

    我正在实现一个基本的音频播放器来播放远程音频文件 文件格式为 mp3 我编写的代码在模拟器上运行良好 但在真实设备上不起作用 然而 如果我使用 safari 在同一个真实设备上 加载它 我在应用程序中使用的相同 url 工作正常 所以我并没
  • 为什么PHP APC缓存未命中不断增加

    我正在使用 apc php 检查 PHP APC 的统计信息 http svn php net viewvc pecl apc trunk apc php 我在相当繁忙的服务器上有以下统计数据 Cached Files 317 26 3 M
  • Recyclerview 中的 Exoplayer 错误,源错误 没有可用的提取器

    我正在使用 ExoPlayer 在 RecyclerView 中流式传输视频 我正在 ViewHolder 内的 RecyclerView 适配器的绑定方法中实现 ExoPlayer 我使用的视频格式是 m3u8 我使用的 URL 在浏览器
  • 我如何使用 PHP 获取当前月份和前三个月

    谁能告诉我如何使用 PHP 获取当前月份和前三个月 例如 echo date y M d 输出将为 09 Oct 20 但是我需要 August 九月 October 作为输出 提前致谢 Fero 对于月份的完整文本表示 您需要传递 F e
  • 改进最小/最大下采样

    我有一些大型数组 约 1 亿点 需要以交互方式绘制 我目前正在使用 Matplotlib 按原样绘制数组会变得非常慢并且很浪费 因为无论如何您都无法可视化那么多点 因此 我创建了一个最小 最大抽取函数 并将其与轴的 xlim changed
  • Vim Spell 选项忽略包含下划线、数字等的源代码标识符

    vim 拼写检查器中是否有任何选项可以忽略纯文本文件中包含下划线 多个大写字母 减号 数字的单词 我在手册 7 2 或谷歌搜索中找不到任何内容 您可以使用syntax命令与 NoSpell簇 syn match myExCapitalWor
  • 无 JIT 优化

    看一下这个问题 https stackoverflow com questions 17761515 java multiplication strange behaviour 代码 class test public static voi
  • 由于 IDFA 无法点击“准备上传二进制文件”

    我即将提交应用程序的更新 当我单击 准备上传二进制文件 时 我收到以下问题 此应用程序是否使用广告标识符 IDFA 由于 AdMob 使用它 我选择 是 下图显示了当我单击 继续 时发生的情况 唯一的问题是 无法选择应用程序如何使用IDFA
  • 为什么随机类不是真正随机的? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在留言板上读到过这件事 Random班级并不是真正随机的 它是使用数学公式以可预测的方式创建的 真的是这样吗 如果是这样 Random真的不是随机的
  • Python 输入无法正确比较[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我今天在测试中做到了这一点 然后回来测试它 我知道更好的方法来做到这一点 但为什么这不起作用 def f e raw input ente
  • 从现有架构生成表关系图(SQL Server)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有办法生成一个图表 显示现有表及其与数据库的连接的关系 这是针对 SQL Server 2008 Express Edition 的
  • 什么是 C/C++ 数据段和堆栈大小?

    我读到这取决于编译器和操作系统架构 如何在使用 GCC 作为编译器的 Linux 系统上找到数据段和堆栈最大大小 让我和你一起实验一下 创建文件 test c 如下所示 int main void return 0 现在编译它 指定最大堆栈