banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Thắc mắc về cấu trúc bộ nhớ trong C/C++  XML
  [Programming]   Thắc mắc về cấu trúc bộ nhớ trong C/C++ 13/11/2007 11:05:46 (+0700) | #1 | 97240
[Avatar]
zThienLongz
Member

[Minus]    0    [Plus]
Joined: 29/08/2006 10:09:05
Messages: 104
Location: World
Offline
[Profile] [PM] [WWW]
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.....
[Up] [Print Copy]
  [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
[Profile] [PM]

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
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 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|