【发布时间】:2015-10-30 20:44:46
【问题描述】:
我正在使用 MIPS32 并使用 C 进行编码。
目前我的代码中的许多函数都返回“int”数据类型。
由于我的开发是在资源受限的硬件上(甚至字节也很重要),并且返回值只是错误代码(不超过 255),因此我计划将返回类型缩小为 int8_t 或 int16_t。
我想要实现的是减少调用者的堆栈/内存使用量。
在我尝试之前, 这会导致调用者的堆栈/内存使用减少吗?或
由于我听说过内存对齐(主要为 4 个字节)并且不太了解,这会在这里玩坏游戏吗?
示例
int caller(){
int8_t status;
status = callee();
}
int8_t callee() {
...
return -1;
}
在上面的示例中,status 标识符声明为 int8_t 或 int16_t 或 int 在 mips32 中是否重要?
【问题讨论】:
-
如果您提供一个您实际拥有的示例并说明您计划做什么以及您的担忧在哪里,将有助于了解您尝试实现的目标。目前我的回答只是“当然,你为什么不可以?”
-
你应该检查你的调用约定。在某些情况下,寄存器可能用于返回数据,并且由于它是 32 位的,因此 1,2 或 4 字节之间没有差异。请参阅en.wikipedia.org/wiki/Calling_convention#MIPS 它说“返回值存储在寄存器 $v0 中”
-
@user996142 这就是我想知道的。在哪些情况下,这没有区别?
-
@Benvin 总之。将返回类型从
int更改为int8_t不会减少堆栈的使用。如果您的堆栈空间不足,那么您的程序通常有问题。 -
我不是低级大师,所以你应该用调试器重新检查我的答案或等待真正知道答案的人,但我相信这没有什么区别,因为寄存器用于返回值,并注册反正是 32 位的。
标签: c