首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我运行代码前后的函数地址不同?

在计算机编程中,函数是一段具有特定功能的代码块。函数在程序中可以被多次调用,每次调用时都会执行函数内部的代码。当我们运行代码时,会发现每次调用同一个函数时,函数的地址可能会不同。这是由于计算机的内存管理机制导致的。

计算机内存被划分为多个区域,其中包括代码区、数据区和堆栈区。函数的地址通常保存在代码区。在程序加载时,代码区会被分配给不同的函数和指令,每个函数都会被分配一个唯一的地址。

当我们调用一个函数时,计算机会在堆栈区为该函数创建一个新的栈帧。栈帧包含了函数的局部变量、参数和返回地址等信息。每次函数调用都会创建一个新的栈帧,因此函数的地址可能会不同。

另外,编译器和链接器的优化策略也可能影响函数地址的变化。编译器和链接器会对代码进行优化,例如函数内联、代码重排等。这些优化可能会导致函数的地址发生变化。

总结起来,函数地址不同的原因有以下几个方面:

  1. 计算机的内存管理机制导致了函数地址的分配不同。
  2. 每次函数调用都会创建一个新的栈帧,导致函数的地址可能会不同。
  3. 编译器和链接器的优化策略也可能导致函数地址的变化。

需要注意的是,函数地址的变化通常不影响程序的正常运行,因为编译器会负责将函数调用映射到正确的地址上。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

BI为什么查询运行多次?

如果查询由一个或多个其他查询引用,则独立计算每个查询(以及它依赖所有查询)。在桌面环境中,使用单个共享缓存运行数据模型中所有表单个刷新。...Caching可以减少对同一数据源多个请求可能性,因为一个查询可以受益于已针对其他查询运行和缓存相同请求。...不过,即使在此处,也可以获取多个请求,因为数据源未缓存 (例如本地 CSV 文件) ,因此对数据源请求不同于由于下游操作 (可以更改折叠) 而缓存请求,缓存太小 (相对不太可能) , 或因为查询大致同时运行...在云环境中,每个查询都使用自己单独缓存进行刷新,因此查询无法受益于已为其他查询缓存相同请求。折叠有时,Power Query折叠层可能会根据正在下游执行操作生成对数据源多个请求。...如果计算零行架构需要提取数据,则可能会出现重复数据源请求。数据隐私分析数据隐私对每个查询进行自己评估,以确定查询是否安全运行在一起。 此评估有时可能会导致对数据源发出多个请求。

5.5K10
  • 代码无法运行时候,在想什么?

    经常被问一句话就是:为什么代码无法运行?然后细看有些问题,真是让哭笑不得,比如no module name pygame…… ?...今天来谈谈运行代码遇到问题时,怎样做才是最好解决方案吧~授人以鱼不如授人以渔! 大家关注公众号下载代码运行,肯定是出于各种各样目的。...针对各类情景,做了个分析和总结,大家可以根据自己场景选择合适解决方案。 情景1:只是为了完成老师或者boss一个作业,仅此而已。...这种情景就非常简单了,只是完成任务的话,直接花点钱去某宝买个现成就行了。也没必要用代码来折磨自己,把时间花在更重要地方~ 情景2:是小白,刚接触编程,跟着文章一步一步操作最后也没成功。...这些基础问题基本上你都能找到手把手教程教你怎么去解决。再者,学会查看报错信息也是一个重要技能。 发现很多小伙伴遇到错误根本不看输出错误信息一眼,对,一眼他都不看

    1.4K30

    使用 Unicorn 模拟器运行具有不同 CPU 架构代码

    所以它可以是一个非常好工具来帮助进行一些动态代码分析。您可以运行具有不同目标架构代码并立即观察结果。 演示应用 这是为这个演示制作一个非常基本应用程序。...如果使用调试器,通常会尝试在地址处放置一个断点0x100007ed8——一个strcmp实际执行字符串比较和分析寄存器函数调用。...根据调用约定,这些应该是上面源代码中我们dec_key和变量地址。key 让我们在模拟器中运行这段代码,x0并x1在strcmp调用之前转储内容。...无论如何,我们不会将 C 运行时库加载到我们模拟器中,因此strcmp不会指向真正函数,因此不会工作。此外,它还需要重新绑定一些函数存根,这超出了本文范围。...0x100007ed8是strcmp我们希望仿真结束地址。 仿真结束后,我们要检查地址x0并x1转储相应地址内存。 输出 在这里我们可以看到模拟器成功运行

    2.1K10

    为什么写不出面向对象代码

    今天来分享常用几种这几模式: 策略模式 策略模式是一种比较简单设计模式,生活中做成一件事有几种不同策略选择供你达成。...观察者模式 因此我们可以抽象为: 功能A运行,触发了功能B运行。...关于DDD领域驱动设计,推荐书籍: “《领域驱动设计:软件核心复杂性应对之道》 《实现领域驱动设计》 ” 为什么我们在使用贫血模型 看了上面的代码,我们可能会疑问:使用贫血模型开发挺好啊?...因此总结为什么人们更愿意使用贫血模型呢: “ 充血模型相对贫血模型存在一定设计难度,你需要多花时间思考哪些是对象本身行为 面向过程编程思想根深蒂固,很难改变 对代码没有太大负责态度,认为怎么简单怎么来...那么建议你多做一些思考: 1.代码是不是面向对象代码 2.代码设计是否遵循 高内聚,低耦合设计标准 3.代码是否遵循设计原则,如单一职责原则,开闭原则等 4. ...

    1.2K20

    是不会运行代码吗?不,是不会导入自己数据!

    如何准备数据、拿到正确格式数据并导入后续代码进行分析,是学习和应用过程中第一个拦路虎。 为什么教程会习惯使用内置数据?...简单省事、便携可重复;这是内置数据优势之一; 内置数据模式清晰,通常可以获得较好结果;这是内置数据优势之二; 别人用这个,也用这个,这是一个偷懒做法。 每个人常识不同。...不太赞成教程里面用使用内置数据,原因是: 对不会读入数据的人不友好; 不利于探索这篇教程用于实际数据时可能会遇到问题。示例数据无脑运行,自己数据无显著差异。...如果要使用内置数据,也需要额外提供一些信息: 详细描述内置数据格式和生物含义,及与真实数据对应,可以参考画一个带统计检验PCoA分析结果 提供真实数据格式示例和读入真实数据代码,弥补这个“鸿沟...这里涉及到另外一个经常会被问起问题: 这一步操作需要提供原始数据,还是标准化之后数据? 绝大多数情况下,我们需要提供都是标准化之后不同样品之间可比数据。

    1.4K10

    为什么 Mac 运行缓慢以及如何使用CleanMyMac X修复它

    然而很多人上手Mac后会发现,它使用逻辑与Windows存在很多不同,而且随着使用时间增加,一些奇奇怪怪文件也会占据有限磁盘空间,进而影响使用。...在本文中,我们将解释 MacBook 运行缓慢原因,并为您提供十个神奇修复方法,让您 MacBook 恢复速度。开始吧! 为什么 Mac 运行缓慢? 浏览器对内存要求越来越高。...10 种有保证解决方案,可加快慢速 Mac 运行速度 1.后台运行过多 如果您 Mac 无法再处理简单任务,并且您想找到“为什么 Mac 这么慢?”...如果您在完成上述工作后仍然问为什么 MacBook 这么慢,请确保您 Mac 已安装所有最新更新。 4....我们所有人都会下载一开始看起来有用且令人兴奋应用程序,但结果却使我们磁盘变得杂乱无章,而不是经常使用。 快速修复:卸载未使用应用程序 回答“为什么 iMac 这么慢?”

    2.7K30

    为什么if-else会影响代码复杂度

    关于if-else争议 之前写了一篇文章《用规则引擎消除if语句,提高了代码可扩展性》,这篇文章想阐述观点是复杂if语句可能会影响代码阅读和代码扩展性,会将非业务条件逻辑与业务逻辑混合在一起...时间长了代码会越来越臃肿,因此这种情况下推荐使用一些设计模式例如策略模式,责任链模式等去优化if语句带来问题,文中发现使用规则引擎也能实现类似效果,因此介绍了怎么使用规则引擎Easy Rules去取代...这里要阐明一个观点: “观点并不是说,我们在编码时不能使用if-else,而是说我们不应该简陋地用if-else去实现业务分支流程,因为这样随意代码堆砌很容易堆出一座座"屎山"。...” 当我们存在不同业务逻辑时,我们通常习惯使用if-else来实现这些不同逻辑,时间长了,代码就会难以维护。相信大部分人写过下面类似的代码。...屎山代码雏形 上面的代码(基于实际项目的伪代码),大家看了后有什么感想。如果我们需要修改上面的条件逻辑,相信编码者本人都会被这样代码绕晕,更不用说后面接手开发了。

    1.5K10

    dotnet 为什么开源运行时仓库代码减少使用 Linq 语句

    在 dotnet 开源 runtime 运行时仓库里面,有微软大佬说运行时仓库代码应该减少使用 Linq 语句,那这又是为什么呢 微软 Jan Kotas 大佬说了下面这段话,大概意思就是减少在运行时库里减少对...而 Günther Foidl 小伙伴就帮我问了一句为什么,难道是将会让单文件体积,也就是输出二进制文件体积比较大?...,放心,没有性能问题 只是运行时库想要减少 JIT 创建泛形类型时间,因此减少使用而已 当然,本文只是裁几段话,没有很具体上下文含义。...allocations for Process.GetProcessesByName by Serg046 · Pull Request #41137 · dotnet/runtime 上面这个 PR 其实是提出一个问题...尽管在获取进程时候,性能是在获取本机代码,但是多申请内存是影响未来。这个意思是在调用这个方法代码了解到这里性能比较渣,因此将会有预期。

    55310

    数据访问函数代码(一)—— 共用部分

    /* 2008 4 25 更新 */ 数据访问函数源码。整个类有1400多行,原先就是分开来写,现在更新后还是分开来发一下吧。 第一部分:内部成员,初始化设置等。...            cm.Dispose();         }         #endregion         public DataAccessLayer()    //构造函数...HBS.Config.Connection.ConnectionString );             //初始化错误信息             errorMsg = "";             isShowErrorSQL = true;  //本地运行...,显示出错查询语句(包括存储过程名程)             //isShowErrorSQL = false; //服务器运行,不显示出错查询语句(包括存储过程名程)         }...            errorMsg = FunctionName + "函数出现错误。

    77890

    OpenCV论道:为什么伽马校正函数只有一行?

    大家好,又见面了,是你们朋友全栈君。...最近在用 OpenCV 识别棋盘棋子,基本思路是这样:先转灰度,再做高斯模糊和二值化,此时棋盘格上有的有棋子,有的无棋子;通过迭代腐蚀,消去棋子,再迭代膨胀回来,就得到了一个纯净棋盘;识别棋盘,标定位置...就是提升图像暗部细节。这与加曝处理是不一样,加曝一般不区分图像暗部和亮部。...奇怪是,在网上搜到伽马校正函数看起来都很复杂,即便是 python 写,也都得十几行甚至几十行,可我写伽马校正函数只有一行。为什么会这样呢?是理解不对吗?...、伽马校正(gamma=2)灰度二值化效果、伽马校正(gamma=3)灰度二值化效果: 对于彩色图片,这个伽马校正函数依然有效。

    1.1K20

    数据访问函数代码(三)——返回结构数组

    /* 2008 4 25 更新 */ 数据访问函数源码。整个类有1400行,原先就是分开来写,现在更新后还是分开来发一下吧。 第三部分:返回结构 数组,这个是专门针对网页来设计。...//新增加部分,返回结构数组用于绑定控件                  #region 函数实现 — — RunSqlStructBaseTitle         ///          /// 运行SQl语句返回结构数组BaseTitle         ///          /// 查询语句。... — — RunSqlStructBaseTitle         ///          /// 运行SQl语句返回结构数组BaseTitle         /// </... — — RunSqlStructBaseTitle         ///          /// 运行SQl语句返回结构数组BaseTitle         /// </

    1.4K60

    感谢 compose 函数,让代码屎山💩逐渐美丽了起来~

    最终惊人发现:这个实现过程并不难,但是效果却不小! 实现思路:借助 compose 函数对连续异步过程进行组装,不同组合方式实现不同业务流程。...这样不仅提高了代码可读性,还提高了代码扩展性。想:这也许就是高内聚、低耦合吧~ 撰此篇记之,并与各位分享。...都能遇见它会充斥着各种判断,变量赋值、引用飞来飞去,最终成为一坨,没错,代码屎山 摸了摸左胸左心房,它告诉:“饶了接盘侠吧~” 于是乎,本瓜尝试引进了之前吹那么 nb 函数式编程!...它能力就是让代码更可读,这是所需要!来吧!!展示!! compose 函数 我们在 《XDM,JS如何函数式编程?看这就够了!(三)》 这篇讲过函数组合 compose!...阶段总结 你问我什么是 JS 函数式编程实战?只能说本篇完全就是出自工作中实战!!! 这样导致本篇代码量可能有点多,但是这就是实打实需求变化,代码迭代、改造过程。

    59431

    【C 语言】内存四区原理 ( 常量区示例 | 不同函数返回相同字符串指针地址相同 )

    文章目录 前言 一、正常程序 二、获取相同字符串内容 前言 C / C++ 编译器会对代码进行 词法分析 , 语法分析 , 句法分析 ; 然后对代码进行优化 ; 将 字符串常量 赋值给指针时 , 首先去...char* 指针 ; 下面的 2 个程序 , 分别演示 不同字符串常量 和 相同字符串常量 地址区别 ; 一、正常程序 ---- 分别从两个函数中 , 获取两个不同字符串 , 打印出这两个...字符串 内容 及 指针指向地址 ; 代码示例 : #include /* * 函数1 返回字符串 1 */ char *get_str1() { char *p1..., p1, p2); return 0; } 执行结果 : 打印出字符串内容不同 , 字符串指针地址不同 ; p1=abc, p2=123 p1=4210756, p2=4210760 二...、获取相同字符串内容 ---- 如果在 2 个函数中 , 获取 字符串 是相同字符串 ; 此时打印出两个函数指针地址是相同 , 这是因为 获取 字符串 都是从 全局区 中 常量区 中获取

    3.7K10

    从微信聊天记录复制粘贴Linux代码为什么运行失败?

    起因是在最近一次Jimmy老师给大家视频号直播中,我们尝试演示了一段代码运行过程。意外发现,当代码从微信中复制粘贴到终端时,竟然出现了无法运行情况。...这个小插曲不仅引起了好奇心,也激发了探索和解析背后原因欲望。在这篇文章中,将与大家分享对这个问题研究过程、发现原因,以及如何j解决。...情景再现 起因是需要用到kingfisher下载一个数据集,代码直接从微信检索了相关代码 image.png 直接复制粘贴,运行报错信息如下,仔细有看了下代码,没有问题,这就很诡异。...当从微信这样应用中复制文本时,可能会无意中复制了这种空白字符,因为它们在微信中可能用于格式化文本但在代码编辑器或命令行环境中通常是不可见。所以就会出现命令看起来正确,但是却运行不了情况。...不同编辑器和IDE具有不同方法来显示和处理这些非打印字符。

    26310
    领券