我在尝试理解一个更大的问题时正在运行一个小测试。这是我的测试环境:
头.h:
#define MAX_BUFSIZE 500
typedef struct {
int head;
int tail;
int status;
int active;
void * dev[MAX_BUFSIZE];
char free[MAX_BUFSIZE];
int count;
} msg_fifo_t;
extern msg_fifo_t TxBufx[];
extern msg_fifo_t Rx_Buf[];
测试.c:
#include <stdio.h>
#include "head.h"
//msg_fifo_t TxBufx[10]; // This is the important line
int main(int argc, char * argv[])
{
// This part isn't really important...
printf("Hello Test\n");
return 0;
}
所以我使用了这些文件并运行了三个测试,看看我得到了什么大小 -
测试#1(代码如上):
> gcc -Os test.c
> ls -al a.out
-rwxrwxr-x 1 mike mike 7158 Jan 17 11:13 a.out
> size a.out
text data bss dec hex filename
1170 256 8 1434 59a a.out
测试#2(取消注释“重要”行):
> gcc -Os test.c
> ls -al a.out
-rwxrwxr-x 1 mike mike 7181 Jan 17 11:14 a.out
> size a.out
text data bss dec hex filename
1170 256 25208 26634 680a a.out
测试#3(取消注释“重要”行并将TxBufx
大小更改为 100)
> gcc -Os test.c
> ls -al a.out
-rwxrwxr-x 1 mike mike 7181 Jan 17 11:14 a.out
> size a.out
text data bss dec hex filename
1170 256 252008 253434 3ddfa a.out
所以现在我的问题:
看起来 bss 大小几乎与可执行文件的“大小”无关(如
ls -al
命令所报告的那样) - 谁能向我解释为什么会这样?该特征是否特定于编译器/链接器/或平台?
有没有比
size
了解这里发生的事情更好的工具?(意思是什么真正构成了我的可执行文件的 7181 个字节?)