Cấp phát động (Dynamic memory allocation)

1MB mới bằng 1024kB chứ nhỉ???

1 Like

bài viết rất hay và chi tiết tks tác giả

Có 4096 bytes thì sao mà tràn :slight_smile: ở trên ghi phải đúng 1MB mới tràn mà.

3 Likes

à quên mất, thanks bạn nha

Cấp phát động sợ nhất là quên thu hồi vùng nhớ.

3 Likes

Có gì đó sai sai !
Rõ ràng trên hình vẽ chó ký hiệu rõ là Stack và Heap có thể mở rộng như nhau và cả 2 vùng nhớ này bằng nhau, một điều khó hiểu là tác giả lại nói vùng nhớ Heap lớn hơn Stack và …
Quá nhiều điều khó hiểu cần tác giả đính chính lại !

Có thể xin cấp phát thêm bộ nhớ stack bằng lệnh

#pragma comment(linker, "/STACK:n") //n bytes

Nếu n lớn thì phải chạy ở chế độ x64
Theo như stackoverflow thì một biến được cấp phát bằng malloc, calloc sẽ nằm ở heap, còn với new thì ở vùng unused giữa stack và heap.

Câu này là link-time thôi, theo bài bản là runtime.

1 Like

Cho mình hỏi hệ điều hành sẽ cấp cho mình một range of int là một vùng nhớ liên tiếp nhau hay không ạ?
(đối với khai báo biến đơn nhé)

Biến đơn thì làm sao mà đặt vấn đề như vậy được. Còn range này là cấu trúc mới ‘quá’ nên ko phù hợp lắm với chủ đề nhập môn.

Vẽ ước lệ thôi :smiley: sao mà bằng được, chỉ mở rộng ngược chiều nhau.

Em khá thắc mắc là tại sao ở bài phân vùng bộ nhớ ,rõ ràng là 2 phân vùng DATA SEGMENT và BSS SEGMENT dành cho biến toàn cục( ngoài các hàm ) - thì phải tương xứng với phương thức cấp phát STATIC memory allocation chứ ạ !
Còn phương thức cấp phát Automatic memory allocation -thì tương xứng với chỉ phân vùng stack(vì biến cục bộ(trong hàm ) ), nhưng tác giả lại viết ở bài này là cả 2 phương thức STATIC memory allocation và Automatic memory allocation đều dùng phân vùng stack ,nghĩa là sao ạ ! (mong mọi người giải đáp giúp em ạ :slightly_smiling_face: )
Em còn một thắc mắc nữa là nếu dùng kĩ thuật cấp phát động thì biến đó chỉ là biến cục bộ trong phân vùng HEAP thôi ạ , có kiểu cấp phát động nào có thể tương tự cấp phát
biến toàn cục không ạ ( chắc chỗ này e hỏi ngu :)) nhưng cứ đăng lên hỏi mọi người xem sao ạ :)) )
Em cám ơn mọi người ạ !

sao nhập giống trên mà lại ra lỗi vậy? :thinking::thinking:

*parrint rồi :smiley: sao còn [] nữa được.

6 Likes

Sửa *p_arr[i] thành *(p_arr + i) hoặc p_arr[i]. :slight_smile:

4 Likes

Anh có bài viết tương tự về ngôn ngữ C không ạ ?

Vô link dưới nè bạn. :slight_smile:

3 Likes

Cảm ơn bạn nhiều :slight_smile:

1 Like

cho em hỏi việc cái bộ nhớ chương trình thì thường là hệ điều hành sẽ cấp cho bộ nhớ ảo là một tài nguyên nhất định hay sao ạ.

Không rõ bạn muốn hỏi gì, nhưng không hẳn là khi cấp 1 range địa chỉ ảo thì thật sự là có ô nhớ đâu.

3 Likes

cho minh hỏi giữa 2 câu lệnh này p=&x và p=&x trong C có khác nhau k ạ?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?