Я провожу небольшой тест, пытаясь понять -executable">большая проблема. Вот моя тестовая среда:
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 байт, который является моим исполняемым файлом?)