Hướng đối tượng Sử dụng bộ nhớ
Trang 1SỬ DỤNG BỘ NHỚ
TRONG C++
Trang 2Unitialized data
Initialized data
Code
Stack
Hình ảnh bộ nhớ khi chương trình C++ đang thực thi
Vùng nhớ thấp
Vùng nhớ cao
C++ chia bộ nhớ thành 4 vùng:
• Vùng mã chương trình
(Code area)
• Vùng dữ liệu (Data area)
• Vùng Heap
• Vùng Stack
Trang 3Unitialized data
Initialized data
Code
Stack
Vương Đức Bình - Tổ bộ môn CNTT - Trường CĐBT
Có gì trong vùng mã chương trình ?
Chương trình nguồn:
int my_int, his_int;
main( ) {
my_int = 5;
my_int++;
his_int -= 10;
}
Chương trình đã biên dịch thành mã hợp ngữ cho 80x86:
MOV my_int,5 INC my_int SUB his_int,10
MOV my_int,5
INC my_int
SUB
his_int,10
Trang 4Unitialized data
Initialized data
Code
Stack
Có gì trong vùng dữ liệu ?
Chương trình nguồn:
int your_int, my_int, his_int=3;
main( ) {
my_int = 5;
my_int++;
his_int -= 10;
} void my_func(void) {
int her_int; static int s_int=3;
her_int=5;
s_int++;
}
MOV my_int,5
INC my_int
SUB
his_int,10
his_int =3
your_int
=0
my_int=
0
1 Mọi biến không được khởi tạo đều xếp vào vùng Unitialized area và đều được gán giá trị 0
2 Không phải biến nào cũng được đặt vào vùng Data Chỉ có 3 loại biến được đặt vào vùng này:
• Biến toàn cục
• Biến tĩnh.
• Mảng được khởi tạo và cấu trúc (struct / class)
Các biến her_int và s_int sẽ được đặt vào đây khi hàm my_func được gọi và có thể bị tái
Trang 5Unitialized data
Initialized data
Code
Stack
Vương Đức Bình - Tổ bộ môn CNTT - Trường CĐBT
Có gì trong vùng nhớ Heap ?
# include <alloc.h>
int my_int, his_int=3;
main( ) {
char *my_data;
my_int=5;
my_int++;
his_int -=10;
my_data=malloc(10);
} my_data[10]
his_int=3
my_int=0
Mảng này chỉ được bố trí khi câu lệnh này được thực thi
MOV my_int,5
INC my_int
SUB his_int,10
*my_data
Trang 6Unitialized data
Initialized data
Code
Stack
Có gì trong vùng nhớ Stack ?
– Chứa các biến tự động.
– Chuyển giao tham số cho các hàm.
– Chứa các địa chỉ trở về.
Trang 7Unitialized data
Initialized data
Code
Stack
Vương Đức Bình - Tổ bộ môn CNTT - Trường CĐBT
Tóm tắt
PROGRAM CODE
INITIALIZED STATIC VARIABLES INITIALIZED GLOBAL VARIABLES
UNITIALIZED STATIC VARIABLES UNITIALIZED GLOBAL VARIABLES
VARIABLES ALLOCATED WITH new, malloc(), farmalloc(),realloc() and calloc()
AUTOMATIC VARIABLES.
PASSING PARAMETERS USE BY FUNCTION CALL.
RETURN ADDESSES.