非常奇怪的問題我正在努力調試,目前處於虧損狀態,所以我想看看是否有人有任何想法/想法。爲什麼要更改結構大小,更改可執行文件的大小?
有在我的代碼庫的字符驅動的一個定義(這是一個發行版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內核的coldfire工具鏈構建)。
你的環境是否有類似'.bss'的東西? – cnicutar
您的鏈接器可能會生成一個映射文件。你可以用它來查看到底發生了什麼。 –
也許編譯器優化?如果它是'gcc',請嘗試使用'-Os'flag編譯。 –