c - 返回函数是否比非返回函数具有更多的性能开销?
问题描述
我处于从函数返回值是可选的情况。所以无论我返回还是不返回在逻辑上都没有区别,但我可以安全地假设同样的事情吗?
我的意思是当我们使用一个返回一些值(例如:)的函数而不是返回的函数时,是否有任何性能开销(时间或内存)?Int
void
这是一个虚拟项目,出于我的好奇心,这个问题很明显。
解决方案
这取决于使用的 ABI 以及被调用的函数是否是内联的。
在具有System V 应用程序二进制接口 AMD64(Linux、FreeBSD、macOS、Solaris 和 Linux 的 Windows 子系统)的x86_64 平台上,sizeof
在寄存器中返回最多 16 个字节的返回值。返回最多 16 个字节涉及将返回值加载到一个或两个 8 字节寄存器中。返回较大的值涉及通过传递给被调用者的隐藏返回值指针存储到调用者的堆栈中,该指针也必须rax
在返回时加载到寄存器中。
有关调用约定的详细处理,请参阅Agner Fog的调用约定,特别是 §7.1 传递和返回对象。在寄存器中传递 SIMD 类型有单独的调用约定。
推荐阅读
- botframework - 登录操作后如何继续机器人命令回答?
- jenkins - Kubernetes Helm install stable/jenkins deprecation error calling Master.* values
- apache-nifi - 为什么 QueryDatabaseTable 执行完整的查询获取而不是使用最大列值从 Apache Nifi 中的 Oracle 获取数据?
- html - preg_replace
不知道为什么下面的代码不起作用。有任何想法吗?
<table width="567"
$text = preg_replace('/<table width=["\']\s*\d+\s*(px|%)\s*["\']/', '<table width="100%"', $text);
swift - Swift IOS - 一个复杂的表格视图单元格的排列 - python - 更改 Python:在 Visual Studio Code 的终端命令中运行 Python 文件
- python - MongoDB 更新多个嵌套数组
- node.js - 我可以部署一个前端文件夹和后端文件夹都在同一个 Github 存储库上的 MERN 应用程序吗?
- sql - 查看不执行,但直接运行相同的查询
- typo3 - TYPO3 9 Extbase EXT originalResource 的 FileReference 始终为 NULL。为什么?