我正在调试的非常奇怪的问题,目前不知所措,所以我想看看是否有人有任何想法/想法。
在我的代码库中的一个 char 驱动程序中有一个定义(这是 uCLinux 发行版中的许多驱动程序之一):
#define MAX_BUFSIZE 500
当我这样构建时,我会看到输出包大小:
-rw-rw-r-- 1 mike users 1720620 Jan 16 11:00 gcl-kernel.pkg
当我将定义更改为 1000 并重建时:
#define MAX_BUFSIZE 1000
-rw-rw-r-- 1 mike users 2359596 Jan 16 11:17 gcl-kernel.pkg
整体内核映像大大增加。那#define
是唯一的变化。AFAIK,这应该在运行时改变了可执行文件的 RAM 大小,它不应该对可执行文件的大小做任何事情。
所以我的问题:
谁能想到修改结构会改变最终图像大小的任何原因?
如果您关心其他分析/信息:
我在头文件中定义的一个结构中跟踪了它的使用情况:
typedef struct {
int head;
int tail;
int status;
int active;
void * dev[MAX_BUFSIZE];
char free[MAX_BUFSIZE];
canmsg_t data[MAX_BUFSIZE];
int count;
} msg_fifo_t;
每当我更改任何这些数组的大小时,可执行文件的大小都会发生变化。每当这种类型的新对象在代码中出现或被删除时,可执行文件的大小就会发生变化,例如:
extern msg_fifo_t Tx_Bufx[];
extern msg_fifo_t Rx_Buf[];
则具有不同的输出可执行文件大小:
extern msg_fifo_t Tx_Bufx[];
//extern msg_fifo_t Rx_Buf[];
我已经尝试过,但似乎无法在我的 x86 系统上创建此问题的较小版本来调试问题,它必须与环境有关。(为 uCLinux 2.4 内核构建冷火工具链)。