Memory management in C
mình có dọc một tài liệu về quản lý bộ nhớ trong c nó viết như thế này
quản lý bộ nhớ trong c được chia làm các phân vùng như sau
Code segment or text segment: Code segment contains the code executable or code binary.
Data segment: Data segment is sub divided into two parts
– Initialized data segment: All the global, static and constant data are stored in the data segment. – Uninitialized data segment: All the uninitialized data are stored in BSS.
Heap: When program allocate memory at runtime using calloc and malloc function, then memory gets allocated in heap. when some more memory need to be allocated using calloc and malloc function, heap grows upward as shown in above diagram.
• Stack: Stack is used to store your local variables and is used for passing arguments to the functions along with the return address of the instruction which is to be executed after the function call is over. When a new stack frame needs to be added (as a result of a newly called function), the stack grows downward.
mình chưa hiểu phân vùng Code segment or text segment nó chứa mã thục thi hay là mã code do mình viết ra nhỉ và ý nghĩa thực sự của việc hiểu được mấy thứ như thế này
Làm gì có khái niệm mã thực thi hay mã do mình viết ra nhỉ :).
Khi bạn viết mã ra , máy biên dịch ra mã máy (có thể hiểu là mã thực thi theo cách hiểu của bạn ) và lưu vào những vùng nhớ khác nhau được quy định.
Code Segment and Text Segment thực ra là tên gọi chung. Có thể họ gọi Text Segment cũng có thể gọi là Code Segment. Gọi chung là vùng nhớ lưu dữ những lệnh thực thi… Thường những lệnh thường xuyên được gọi nhất. Đây là section thường chiếm nhiều dung lượng trong bộ nhớ chương trình vì đa số chứa mã lệnh ở đây.
Còn mã do mình viết ra ý bạn là những dòng lệnh kiểu" If , else…vv" hả?
Mấy cái đấy chỉ được lưu trong editor của bạn. Ngoài ra nó chẳng được lưu ở đâu nữa cả .
hieu duoc nhung khai niem co loi ich gi nhi ha ban
Ôi trời .
Thế mình có thể hiểu vì sao bạn lại đọc những thứ này không?
Hiểu được những thứ này bạn sẽ hiểu những dòng lệnh bạn viết nó có thể nằm ở đâu trong bộ nhớ chương trình.
Giả sử : int a;
Dòng lệnh đó sẽ được bên dịch và nằm ở đâu…
Tựu chung lại nó là Memory Layout.