- 论坛徽章:
- 0
|
NO.1
int main()
{
printf("Hello, world!\n");
}
$size test
text data bss dec hex filename
930 292 4 1226 4ca test
$ls -l | grep 'test$'
-rwxr-xr-x 1 abc abc 6466 2009-03-11 15:14 test
/*************************************************************/
/*test.c -> test*/
#include <stdio.h>
int main()
{
int int_arr[1000];
printf("Hello, world!\n");
}
$size test
text data bss dec hex filename
930 292 4 1226 4ca test
$ls -l | grep 'test$'
-rwxr-xr-x 1 abc abc 6466 2009-03-11 15:14 test
/*************************************************************/
#include <stdio.h>
int main()
{
double int_arr[1000];
printf("Hello, world!\n");
}
$ size test
text data bss dec hex filename
930 292 4 1226 4ca test
$ ls -l | grep 'test$'
-rwxr-xr-x 1 abc abc 6466 2009-03-11 15:20 test
/*************************************************************/
#include <stdio.h>
int main()
{
char int_arr[1000];
printf("Hello, world!\n");
}
size test
text data bss dec hex filename
1051 296 4 1351 547 test
ls -l | grep 'test$'
-rwxr-xr-x 1 abc abc 6630 2009-03-11 15:17 test
/*************************************************************/
定义int int_arr[1000]; 文件大小不变, 是因为他是运行时分配到堆栈里的,不占据文件的空间。
所以程序1,2,3,它们各个段大小一模一样
My Question :
为什么 定义为char型数组,文件会比前3个大呢? 而且主要是占据了text的空间了呢?
NO.2
#include <stdio.h>
int main()
{
char *p = "abcdefghijklmnopq";
printf("Hello, world!\n");
}
$size test
text data bss dec hex filename
964 292 4 1250 4e2 test
$ ls -l | grep 'test$'
-rwxr-xr-x 1 abc abc 6498 2009-03-11 15:27 test
/*************************************************************/
#include <stdio.h>
int main()
{
char p[] = "abcdefghijklmnopq";
printf("Hello, world!\n");
}
$size test
text data bss dec hex filename
1117 296 4 1417 589 test
ls -l | grep 'test$'
-rwxr-xr-x 1 abc abc 6694 2009-03-11 15:31 test
为什么后一个程序会比前一个的test段大那么多呢?
常量字符串应该是在test段中,然后指针p 和 p[] 不都是要分配到运行时堆栈吗?
有一些困惑,但也说不很清除。
哪位兄弟帮我解释下,谢谢了先 |
|