为什么使用函数调用而不是变量地址来检测堆栈增长方向?

2023-12-24

我读到了对检测堆栈增长检测问题的不同回答,我了解到,在现代架构中,堆栈可能会随机增长,可能会在堆外创建,等等。

然而,在这个经典的面试问题中,我想明白why人们使用函数调用而不是比较同一函数中的两个局部变量。我认为这样做一定有一些特殊的原因,但我不是 C/低级开发人员 [Java :)],我只是猜测。

这是我尝试过的代码:

void sub (int *a)  {
    int b;
    int c;
    printf ("a:%d\n", a);
    printf ("b:%d\n", &b);
    printf ("c:%d\n", &c);
    if (&b > a) {
        printf ("Stack grows up.\n");
    } else {
        printf ("Stack grows down.\n");
    }
}

int main (void) {
    int a;
    int b;
    sub (&a);
    printf ("\nHere we go again!!\n");
    if (&b > &a)  {
        printf ("Stack grows up.\n");
    } else  {
        printf ("Stack grows down.\n");
    }
    return 0;
}

我还发现这篇文章试图优化我也不明白的解决方案:http://www.devx.com/tips/Tip/37412 http://www.devx.com/tips/Tip/37412

P.S:从对此主题和其他主题的不同反应来看,问题本身似乎是有缺陷/无关紧要的,作为一个面试问题,它可能会重新强化错误的假设,除非有人研究答案!

Thanks!


您无法完全控制编译器选择分配局部变量的顺序。但是,您可以合理地控制将调用的函数以及调用顺序。

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

为什么使用函数调用而不是变量地址来检测堆栈增长方向? 的相关文章

  • 检测到 NuGet 包的版本冲突

    我正在开发 ASP Net core 2 1 Web 应用程序项目 我的解决方案中有 1 个项目和 3 个其他库 它是高级架构 数据访问层 DAL 业务层 BL 公共层 CL 所以我需要添加引用来连接一些库和项目 我已经添加了CL参考我的项
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • 如何排列表格中的项目 - MVC3 视图 (Index.cshtml)

    我想使用 ASP NET MVC3 显示特定类型食品样本中存在的不同类型维生素的含量 如何在我的视图 Index cshtml 中显示它 an example 这些是我的代码 table tr th th foreach var m in
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • Swift 可选的 inout 参数和 nil

    是否有可能有一个Optional inoutSwift 中函数的参数 我正在尝试这样做 func testFunc inout optionalParam MyClass if optionalParam 但是当我尝试调用它并通过时nil
  • swi prolog 中的优化

    假设我想找到 argmax x y z 1 2 20x 2 32xy 16y 2 2x 2y 受 x gt 0 y gt 0 z gt 0 且 x y z 0 我知道偏导数设置为 0 是 20x 16y 2 0 和 16x 16y 2 0
  • onCreate 方法内的屏幕截图在 android 中不起作用

    我正在一个 Android 应用程序中工作 我想在重写的方法 onCreate 中捕获当前活动的屏幕 当我在重写的方法 onCreate 中编写用于捕获屏幕的代码时 位图返回 null 但是 当我在同一活动中单击按钮中调用相同的代码时 位图
  • 在Container中挂载目录并与Host共享

    我以为我理解了文档 但也许我没有 我的印象是 v HOST PATH CONTAINER PATH标志是双向的 如果容器中有文件或目录 它们将被镜像到主机上 这使我们即使在删除 docker 容器后也能保留目录和文件 在官方 MySQL d
  • statsmodels wls_prediction_std 的数学背景

    wls prediction std 返回拟合模型数据的标准差和置信区间 我需要知道如何从协方差矩阵计算置信区间 我已经尝试通过查看源代码来解决这个问题 但没能做到 我希望你们中的一些人可以通过写出 wls prediction std 背
  • Android 在 addTextChangedListener (edittext) 中的某些条件下禁用肯定按钮

    这是我的对话框代码 如果编辑文本中的文本大小大于 5 我想禁用肯定按钮 如果大小 private void myDialog String title AlertDialog Builder builder new AlertDialog
  • 归档日志文件时内存不足错误

    我在运行控制台作业时遇到问题 该作业运行并创建我在午夜存档的每日日志文件 这将创建一个第二天的空白日志文件和一个存档文件 其中名称中包含昨天的日期以及旧文件的内容 用于调试我可能遇到但直到第二天才知道的问题 然而 自从我启动 BOT 的工作
  • 更改默认的 Ruby 参数

    我想更改传递给 Ruby 函数的默认参数 例如 而不是每次都写 1 2 3 do stuff option gt my option 我想修改默认值以便我可以编写 1 2 3 do stuff 更改默认参数的最简单 最干净 最像 Ruby
  • 通过 ssh 密钥访问 GitHub 组织

    也许我是瞎子 但我找不到一种方法来访问通过 SSH 密钥授予我访问权限的组织 我知道直接连接到您自己的帐户很容易 但是我该如何通过组织来做到这一点呢 您帐户的个人 SSH 密钥可识别您的 GitHub 用户 如果组织授予您访问权限 则这是通
  • 行进立方体问题

    我目前正在编写一个程序来使用 C 和 Opengl 实现 Marching Cube 然而 我最好的参考仅来自http local wasp uwa edu au pbourke geometry polygonise http local
  • 在 Rcpp 中的另一个 cpp 文件中定义的函数中使用一个 cpp 文件中定义的函数

    我有一个名为的 C 函数add文件中定义add cpp 内容add cpp below include
  • Mysql暂时抑制唯一索引

    我有一个在两列上有唯一索引的表 准确地说是 id parent 和 sort order id id parent sort order some data other data more data 1 1 1 lorem ipsum lo
  • 如何在 VS Code for Markdown 中禁用 IntelliSense?

    我不想在 Visual Studio Code 中为 Markdown 文件提供单词补全功能 如何禁用它 理想情况下 仅适用于 Markdown 但在最坏的情况下 即使是全局切换也是好的 可以配置 VS Code 中的 IntelliSen
  • SQL Server 2008 R2 的百分位数聚合

    我正在使用 SQL Server 2008 R2 我需要计算每个组的百分位数 例如 SELECT id PCTL 0 9 x for the 90th percentile FROM my table GROUP BY id ORDER B
  • PhpStorm 显示/隐藏主菜单

    我错误地使用 视图 gt 外观 隐藏了 PhpStorm 的主菜单 未选中菜单 我尝试了很多关于如何再次显示主菜单的搜索 不久之后我找到了一个非常简单的方法 Press Double Shift用于到处搜索 现在搜索任何设置或您想要更改的任
  • AudioKit AKPlayer 无法回环到 setPosition 开头

    在 v4 中 如果您使用AKPlayer循环并使用setPositionAPI 玩家在设置的位置之间循环setPosition以及玩家的总持续时间 我需要的是从设置的位置开始setPositionAPI 并在循环发生时循环到开头 我不确定这
  • Mongoose 填充子文档数组

    抱歉 如果已经有人问过这个问题 我的搜索没有出现同样的情况 我有两个架构 如下所示 var experimentSchema new mongoose Schema name string elements type mongoose Sc
  • 使用 Firebase 通过聊天应用进行语音通话

    我正在尝试构建一个简单的聊天应用程序 但它需要与其他用户进行语音通话的功能 我将使用 Firebase 进行消息传递 Firebase 是否支持语音通话 我可以配置外部 SIP 如果你想创建语音通话或视频通话应用程序 也许你可以使用WebR
  • 有没有一种方法可以将复杂度为 O(n) 的矩阵相乘?

    I want to multiply two matrices but the triple loop has O n3 complexity Is there any algorithm in dynamic programming to
  • 为什么使用函数调用而不是变量地址来检测堆栈增长方向?

    我读到了对检测堆栈增长检测问题的不同回答 我了解到 在现代架构中 堆栈可能会随机增长 可能会在堆外创建 等等 然而 在这个经典的面试问题中 我想明白why人们使用函数调用而不是比较同一函数中的两个局部变量 我认为这样做一定有一些特殊的原因