c – 32 kB的编译代码多少

前端之家收集整理的这篇文章主要介绍了c – 32 kB的编译代码多少前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我打算使用一个 Arduino programmable board.这些闪存的闪存范围在16到128 kB之间,用于存储编译的C或C代码.

有没有办法估计它将代表多少(标准)代码

我想这是非常模糊的,但我只是在寻找一个数量级.

解决方法

size命令的输出是一个很好的起始位置,但不会给你所需的所有信息.
$avr-size program.elf
text            data    bss     dec     hex filename

您的图像的大小通常比文本和数据部分的总和多一点. bss部分基本上是压缩的,因为它都是0.可能还有其他相关部分不按大小列出.

如果您的构建系统设置为与之前用于AVR微控制器的构建系统,则最终将使用* .elf文件以及* .bin文件以及* .hex文件. * .bin文件是将被存储在处理器的程序闪存中的实际映像,因此您可以检查其大小以确定您的程序在编辑时的增长方式. * .bin文件从* .elf文件提取,其中包含objdump命令和一些我现在不记得的标志.

如果你想知道如何猜测你的C或C代码在编译时会产生多大的代价,这是一个很大的困难.当我尝试使用uint64_t而不是uint32_t时,我观察到一个10x的功能爆发,当我所做的是增加它(这是我认为是大约5倍的代码).这主要是与gcc的avr优化不是最好的,但代码大小的变化可以从看似无辜的代码中爬行.

这可能会被放大使用C,这倾向于隐藏更多的东西变成代码比C. C隐藏的东西是析构函数调用和大量的指针取消引用,它与对象中的这个指针以及许多对象具有的虚拟函数表和类静态变量的秘密指针有关.

在AVR上,所有这些指针的东西都可能真的加起来,因为指针是寄存器的两倍,并且需要多个指令来加载. AVR也只有几个寄存器对可以用作指针,这会导致很多移动的东西进出这些寄存器.

AVR小程序的一些提示

>使用uint8_t和int8_t而不是int,只要你可以.如果您希望代码可移植,您还可以使用uint_fast8_t和int_fast8_t.这可能导致许多操作占用的代码只有一半,因为int是两个字节.>非常了解字符串和结构体常量和文字以及它们的存储位置.>如果你不害怕,请阅读AVR装配手册.您可以了解指令的类型,并从中可以轻松映射到这些指令的C代码类型.使用那种C代码.

猜你在找的C&C++相关文章