21 July 2023

Mô phỏng luồng stack và heap javascript?

 


Trong Javascript, có hai loại bộ nhớ chính: stack và heap. Chúng hoạt động khác nhau trong việc lưu trữ và quản lý dữ liệu. 

 

1. Stack: 

- Stack được sử dụng để lưu trữ các biến cục bộ, tham số và các giá trị trung gian khi hàm được gọi. 

- Mỗi khi một hàm được gọi, một khung dữ liệu mới được tạo trên stack để lưu trữ các biến cục bộ và thông tin về hàm. 

- Khi hàm kết thúc, khung dữ liệu đó sẽ được xóa khỏi stack, giải phóng không gian bộ nhớ. 

 

2. Heap: 

- Heap được sử dụng để lưu trữ các đối tượng động và dữ liệu có kích thước không xác định trước. 

- Đối tượng trên heap tồn tại cho đến khi không còn bất kỳ tham chiếu nào đến chúng. 

- Trong Javascript, việc quản lý heap được thực hiện tự động thông qua thu thập rác (garbage collection), nghĩa là các đối tượng không còn được sử dụng sẽ được tự động thu hồi bộ nhớ. 

 Ví dụ mô phỏng luồng stack và heap trong Javascript:

function foo() {
    let a = 1; // Biến a được lưu trữ trên stack
    let b = { value: 2 }; // Đối tượng b được lưu trữ trên heap, và tham chiếu đến nó được lưu trữ trên stack
    bar(a, b);
}
function bar(x, y) {
    let c = x + y.value; // Biến c được lưu trữ trên stack
    console.log(c);
}
foo();

Trong ví dụ trên, khi hàm  foo  được gọi, một khung dữ liệu mới được tạo trên stack để lưu trữ biến  a  và tham chiếu đến đối tượng  b . Sau đó, khi hàm  bar  được gọi, một khung dữ liệu mới khác được tạo trên stack để lưu trữ biến  x  và  y , trong đó  y  là một tham chiếu đến đối tượng  b  trên heap. Cuối cùng, giá trị của  x  và  y.value  được tính toán trên stack và kết quả được in ra màn hình. Khi hàm  bar  kết thúc, khung dữ liệu của nó được xóa khỏi stack, giải phóng không gian bộ nhớ.

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang