在嵌入式开发或将图片等资源文件编译到可执行文件中的场景下,资源通常会放在专门的段中。具体取决于编译器和链接器的配置,资源文件通常放入以下几个常见的段中:
-
.rodata 段 用途:只读数据段,通常存放常量和不可修改的数据。 描述:图片资源文件可以以二进制或数据数组的形式存储在只读数据段中。这是最常见的选择,因为资源文件在运行时通常不需要修改。 典型使用:静态图片、图标、只读的配置文件等。 示例:
const unsigned char image_data[] = { /* 图片的二进制数据 */ };
编译器通常会将这些数据放在 .rodata 段中,因为它是只读的。
-
.data 段 用途:可读写的数据段,存储初始化的全局变量或静态变量。 描述:如果图片资源在程序运行过程中需要修改(例如动态修改图片内容),那么可以将其放入 .data 段。 缺点:与 .rodata 相比,.data 段的内容会在程序运行时占用 RAM,因为它需要从程序的可执行文件中复制到内存中。
-
自定义段 用途:有时开发者可能希望创建一个自定义的段来专门存储图片或其他资源,以便更灵活地控制它们的加载和管理。 描述:你可以通过链接脚本创建一个自定义段(例如 .imgdata)来存储这些资源文件。 示例(自定义段的链接脚本):
SECTIONS { .imgdata : { *(.imgdata) } }
然后在代码中,使用特定的指令将数据放入该段:
const unsigned char image_data[] attribute((section(".imgdata"))) = { /* 图片数据 */ };
-
.bss 段 用途:未初始化数据段,存储未初始化的全局或静态变量。 描述:一般不适

最低0.47元/天 解锁文章
1743

被折叠的 条评论
为什么被折叠?



