【发布时间】:2014-01-31 18:44:01
【问题描述】:
我在嵌入式系统上(第一次)并且拥有高达 512 个字节的内存。我不断地遇到这个障碍,我希望尽可能节省每一个字节。因此,以下问题:
在 SDK 中有一个函数,原型化:
void foo(int val);
因此,我的主要看起来像:
void main() {
int myVal = 0;
// do stuff to compute myVal
foo(myVal);
}
然而,myVal 的值永远不会超过 ~100。这样做会节省内存吗?
void main() {
short int myVal = 0;
// do stuff to compute myVal
foo(myVal);
}
edit: 在这个架构上,int 是 4 字节,short 是 2 字节。我主要不确定使用本地短(或字符,或其他)是否会节省空间,因为它必须向上转换以满足 foo(int) 原型。
【问题讨论】:
-
stackoverflow.com/questions/589575/size-of-int-long-etc 这可能会对您有所帮助。也可以调用
sizeof方法查看是否有差异。 -
我会查看两种情况下生成的程序集并进行比较。在某些系统上,编译器可能会通过寄存器传递函数参数。如果是这种情况,您可能会在
main()中节省 2 字节的堆栈空间(假设是 4 字节的int)。 -
对于这么小的值,您甚至可以使用
char。 -
您可以两种方式构建项目,然后比较链接器生成的 .map 文件中的部分大小。
-
@nervosol:我知道这些结构有不同的大小。 :) 不过谢谢。我不确定第二个实现是否会节省 2 个字节,因为无论如何它都必须为 foo 参数转换为 int。