c - 为什么参数的函数大小增加到字大小?
问题描述
我阅读了 i386 和 AMD64 的 System V ABI。他们说参数必须四舍五入到字长的倍数。我不明白为什么。
这是情况。如果您将 4 个 char 参数传递给 i386 架构上的函数,它将占用 16 个字节(每个 char 参数 4 个字节)。只为所有 4 个参数分配 4 个字节不是更有效吗?就像它应该与局部变量一样?
对齐不是答案。因为在这两种情况下,16 字节堆栈对齐可能需要 4-12 字节填充。
解决方案
是不是更有效率...
您总是必须说出您想要优化的内容:
- 执行速度快
- 小程序大小
- 更少的堆栈使用
- 更简单的编译器
- ...
如果您想优化更少的堆栈使用,将字节传递给函数确实会更有效。
但是,通常您希望针对快速执行速度或较小的程序大小进行优化。
与现代编译器(mov
堆栈的参数)不同,大多数 1990 年代编写的编译器都知道push
堆栈的参数。如果编译器使用push
操作,则将字节放入堆栈会相当复杂——它会使程序变慢且变长。
(请注意,我从未见过pop
对参数进行操作。)
推荐阅读
- entity-framework - .Net core web api - 如何在控制器中实现 PUT、POST 和 DELETE 方法?
- android - 对话框片段未在 android 中显示视图
- javascript - 为什么我的结果总是“其他”?(测验应用程序)(jquery)
- reactjs - 将新项目添加到数据库时如何自动更新 DOM 或组件。我正在使用 React Hooks 和 axios
- python - 如何使用浮点值创建一个 numpy 数组
- javascript - 0.15 没有使用 tofixed 函数在 javascript 中转换为 t 0.2?
- java - 如何计算与 Spark 的 Spearman 相关系数?我无法从统计书中复制样本
- mysql - Django:获取一对多数据
- angular - 以角度转换 ogg 文件以在 Safari 中播放
- python - 无法将元组列表拟合到 dict