我正在使用MIPS32并在C中编码.
目前我的代码中的许多函数都返回’int’数据类型.
由于我的开发是在资源受限的硬件上(甚至是字节很重要),并且返回值只是错误代码(不超过255),我计划将返回类型缩小为int8_t或int16_t.
我想要实现的是减少调用者的堆栈/内存使用量.
在我尝试之前,
这会导致调用者的堆栈/内存使用量减少吗?要么
因为我听说过内存对齐(大多数是4个字节)&不知道多少,这会在这里发挥一个糟糕的运动吗?
例
int caller(){
int8_t status;
status = callee();
}
int8_t callee() {
...
return -1;
}
在上面的示例中,状态标识符声明为int8_t或int16_t或int是否在mips32中很重要?
最佳答案 当调用堆栈时,这将完全没有变化,可以在这里找到MIPS调用堆栈的示例.
https://courses.cs.washington.edu/courses/cse410/09sp/examples/MIPSCallingConventionsSummary.pdf
$31
$ra
The
Return Address
in a subroutine call.
下面是一个图像,你会看到一个完整的寄存器的返回地址,在你使用32位机器的情况下,你的寄存器将是32位的大小,并没有改变它.
我不得不问,你在做什么需要MIPS?一般来说,这是一种用于教学目的的语言,并且由于它具有许多缺陷而在现实世界中没有太多实际用途.作为示例,返回地址的概念在X86等现代程序集中不存在,其中堆栈指针将包含所有信息.
编辑:
正如下面的人所指出的,我有点不公平.从技术上讲,这些地址也存在.
$2-$3 $v0-$v1 These registers contain the
Returned Value
of a subroutine; if
the value is 1 word only $v0 is significant.
虽然它们具有一组大小,但从调用堆栈的角度来看,它们使用一个完整的寄存器.从理论上讲,我相信MIPS有办法在一个寄存器中存储4个字节,但我不确定.更重要的是,尽管使用MIPS的工作方式,但只有在调用深度为一个函数时才能使用这些返回寄存器.如果你在一个函数中调用一个函数,那么这个概念就会崩溃,并且返回地址变得必需,因此为什么我只是原始地展示了一个.