【发布时间】:2013-01-17 16:51:19
【问题描述】:
我在尝试理解larger problem 时进行了一个小测试。这是我的测试环境:
head.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[];
test.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 字节?)
【问题讨论】:
标签: c linux gcc compilation size