Tải bản đầy đủ (.ppt) (7 trang)

Hướng đối tượng Sử dụng bộ nhớ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (219.91 KB, 7 trang )


SỬ DỤNG BỘ NHỚ
SỬ DỤNG BỘ NHỚ
TRONG C++
TRONG C++
Heap
Unitialized data
Initialized data
Code
Stack
Vương Đức Bình - Tổ bộ môn CNTT - Trường CĐBT
Hình ảnh bộ nhớ khi chương trình C++ đang thực thi
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
Heap
Unitialized 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 ?
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
Heap
Unitialized data
Initialized data
Code
Stack
Vương Đức Bình - Tổ bộ môn CNTT - Trường CĐBT
Có gì trong vùng dữ liệu ?
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 định vị (ghi
đè/bố trí lại - được gọi là các biến tự động: automatic
variables) trừ khi khai báo bằng từ khóa static.
Heap
Unitialized 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 ?
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

×