Hỏi về cấp phát động trong c/c++

Mình có thắc mắc là Array và mảng động đều đùng dãy ô nhớ trên heap vậy thì tại sao Array lại cố định vùng nhớ còn mảng động lại thay đổi sô lượng ô nhớ được , không lẽ nó lại tạo 1 array rồi coppy qua .
Còn ý nữa là các chương trình dùng các khoảng ô nhớ khác nhau trên heap (chưa bàn gì stạck ) vậy thì các vùng nhớ này có liên tục không ,VD vùng nhớ chương trinh LOL có nối tiếp chương trình FIFA và cứ như vậy đến hết ko mà nếu không THÌ array làm sao có cơ sở để tạo được nếu các vùng nhớ không liên tiếp mặc dù sô ô nhớ còn lại là đủ
PS : mình chỉ hỏi lại cái phần này chút thôi mình cũng biết linklist rồi do cái chương trình mình làm xử lí trên RAM nên có chút thắc mắc

Không đúng. Local array dùng mem trên stack, global array dùng .data.

Cái này là compile-time vs. runtime :slight_smile: array chỉ có kích thước là hằng số, còn realloc ntn thì có nhiều cách.

1 Like

nói rõ chút được không bạn

Array sử dụng trên heap tức là biến global. Mảng này được cấp phát sẵn khi chương trình vừa mới được load lên nên kích thước sẽ là cố định. Còn mảng động được cấp phát tại thời điểm gọi hàm new, khi đó chương trình mới xin hệ thống một vùng nhớ với kích thước tùy vào chương trình yêu cầu. Cái này b phải hiểu được cấu trúc của PE File thì sẽ rõ hơn cách mà biến global được lưu trữ.
Mỗi chương trình trên nền tảng windows 32 bit (mình k rõ lắm về windows 64bit) sẽ được cấp 4gb “vùng nhớ ảo” liên tục nhau để thực thi chương trình và chứa stack, heap… Còn câu hỏi Lol với Fifa nối tiêp nhau thì mình k hiểu rõ ý bạn nói lắm :sweat_smile:

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