gpt4 book ai didi

c - 由于可变排序而导致不同的 RAM 消耗

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:14 28 4
gpt4 key购买 nike

总结:似乎 c 代码的 RAM 消耗取决于变量排序。有没有办法自动优化?

更长的版本:在这里,我粘贴了两个版本的代码,它们仅在变量排序方面有所不同。

版本 1:

static unsigned long b=1;
static unsigned char a=1;

unsigned long myfunc(){
return a+b;
}

版本 2:

static unsigned char a=1;
static unsigned long b=1;

unsigned long myfunc(){
return a+b;
}

使用以下编译器选项为 PowerPC arch 使用 DIAB 编译器进行编译,并使用 gnu 的大小实用程序检查两个目标文件中 ram-consumption 的大小,我发现有 3 个字节的差异。

dcc.exe  -Xsmall-data=10 -tPPCE200Z4VFF:simple -c -o version1.o version1.c

第一种情况的 RAM 消耗是 5 个字节,而第二种情况是 8 个字节。应该是这样吗?

两种情况下生成的程序集的不同之处还在于变量的顺序。有没有办法自动优化变量排序以节省 RAM?我想排序应该始终根据变量的大小递减。

引用:Diab 编译器选项: http://www.embedded-tools.de/sites/default/files/pdf/wr_diab_compiler_options_reference_5.9.3-R2.pdf

最佳答案

您的编译器在 char 之后填充 long 以保持对齐。您可能会找到一种方法来禁用它,但这通常不是一个好主意。相反,由你来有效地打包你的变量——即使在某些情况下,在全尺寸计算机上,这也是需要做的事情,而不仅仅是嵌入式。例如:

struct thing
{
char c1;
int i1;
char c2;
int i2;
char c3;
int i3;
};

上面的代码很糟糕,因为它在填充上浪费了 9 个字节,使总大小变成了 24 个字节,而本应只有 16 个字节。如果你创建了很多这样的对象,你就浪费了三分之一的内存(RAM,但更重要的是缓存)。

关于c - 由于可变排序而导致不同的 RAM 消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36889773/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com