[Programming] Thắc mắc về cấu trúc bộ nhớ trong C/C++ |
13/11/2007 11:05:46 (+0700) | #1 | 97240 |
|
zThienLongz
Member
|
0 |
|
|
Joined: 29/08/2006 10:09:05
Messages: 104
Location: World
Offline
|
|
Hiện mình đang đọc về cuốn debugger http://www.dirac.org/linux/gdb/index.php ,trong đó có bài tập và mình gặp vướng mắc về vài câu hỏi trong đó ai giúp mình trả lời với.
Câu: 1/ Cho đoạn mã co tên hello_world-1.c:
Code:
1 // hello_world-1.c
2
3 #include <stdio.h>
4
5 int main(void)
6 {
7 printf("hello world\n");
8
9 return 0;
10 }
sau đó dùng lệnh:
Code:
$ gcc -W -Wall -c hello_world-1.c
$ gcc -o hello_world-1 hello_world-1.o
tiếp đó dùng lênh "size" và lệnh "objdump -h" thì thu được kết quả sau:
Code:
$ size hello_world-1 hello_world-1.o
text data bss dec hex filename
916 256 4 1176 498 hello_world-1
48 0 0 48 30 hello_world-1.o
$ objdump -h hello_world-1.o
hello_world-1.o: file format elf32-i386
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000023 00000000 00000000 00000034 2**2
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .data 00000000 00000000 00000000 00000058 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00000000 00000000 00000058 2**2
ALLOC
3 .rodata 0000000d 00000000 00000000 00000058 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .note.GNU-stack 00000000 00000000 00000000 00000065 2**0
CONTENTS, READONLY
5 .comment 0000001b 00000000 00000000 00000065 2**0
CONTENTS, READONLY
câu hỏi:
_Tại sao lệnh size không in ra vùng nhớ heap và stack của file hello_world or hello_world.o
_Trong đoạn code của file hello_world.c không có biến toàn cục nào cả, tại sao lệnh size nó in ra dung lượng bộ nhớ data và bss của file hello_world.o là 0 nhưng của file thực thi hello_world thì lại là số khác 0
_Tại sao size và objdump lại in ra dung lượng vùng nhớ text segment khác nhau.
Câu 2:
_Có khi nào 1 cấu trúc stack trong vùng nhớ stack bị giải phóng trở về vùng nhớ unused memory không? nếu có thê thì chương trình sẽ như thế nào.
_Can a goto() statement cause frames in the middle of the stack to be deallocated? The answer is no, but why?
_Can longjmp() cause frames in the middle of the stack to be deallocated?
(Ngại dịch quá bà con dịch và trả lời giúp )
Thanks..... |
|
|
|
|
[Question] Thắc mắc về cấu trúc bộ nhớ trong C/C++ |
13/11/2007 13:49:46 (+0700) | #2 | 97284 |
FaL
Moderator
|
Joined: 14/04/2006 09:31:18
Messages: 1232
Offline
|
|
zThienLongz wrote:
Hiện mình đang đọc về cuốn debugger http://www.dirac.org/linux/gdb/index.php ,trong đó có bài tập và mình gặp vướng mắc về vài câu hỏi trong đó ai giúp mình trả lời với.
Câu: 1/ Cho đoạn mã co tên hello_world-1.c:
Code:
1 // hello_world-1.c
2
3 #include <stdio.h>
4
5 int main(void)
6 {
7 printf("hello world\n");
8
9 return 0;
10 }
sau đó dùng lệnh:
Code:
$ gcc -W -Wall -c hello_world-1.c
$ gcc -o hello_world-1 hello_world-1.o
tiếp đó dùng lênh "size" và lệnh "objdump -h" thì thu được kết quả sau:
Code:
$ size hello_world-1 hello_world-1.o
text data bss dec hex filename
916 256 4 1176 498 hello_world-1
48 0 0 48 30 hello_world-1.o
$ objdump -h hello_world-1.o
hello_world-1.o: file format elf32-i386
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000023 00000000 00000000 00000034 2**2
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .data 00000000 00000000 00000000 00000058 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00000000 00000000 00000058 2**2
ALLOC
3 .rodata 0000000d 00000000 00000000 00000058 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .note.GNU-stack 00000000 00000000 00000000 00000065 2**0
CONTENTS, READONLY
5 .comment 0000001b 00000000 00000000 00000065 2**0
CONTENTS, READONLY
câu hỏi:
_Tại sao lệnh size không in ra vùng nhớ heap và stack của file hello_world or hello_world.o
_Trong đoạn code của file hello_world.c không có biến toàn cục nào cả, tại sao lệnh size nó in ra dung lượng bộ nhớ data và bss của file hello_world.o là 0 nhưng của file thực thi hello_world thì lại là số khác 0
_Tại sao size và objdump lại in ra dung lượng vùng nhớ text segment khác nhau.
Câu 2:
_Có khi nào 1 cấu trúc stack trong vùng nhớ stack bị giải phóng trở về vùng nhớ unused memory không? nếu có thê thì chương trình sẽ như thế nào.
_Can a goto() statement cause frames in the middle of the stack to be deallocated? The answer is no, but why?
_Can longjmp() cause frames in the middle of the stack to be deallocated?
(Ngại dịch quá bà con dịch và trả lời giúp )
Thanks.....
Em post cả bài thế này anh cũng ... sợ!
Nêu tổng quát thôi. Từ cái quyển sách em đọc, anh phán bừa mấy câu thế này:
Em phải xem heap dùng để chứa gì? stack dùng để chưa gì? và lệnh size liệt kê cái gì? Lệnh objdump in ra cái gì? Đọc từ từ sẽ nhận ra câu trả lời thôi, vội vàng quá hỏng việc.
FaL. |
|
Hãy giữ một trái tim nóng và một cái đầu lạnh |
|
|
|
|
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|