In glibc, malloc
is implemented with arenas. Vì vậy, ví dụ, có thể bộ nhớ được phân bổ lần đầu bởi malloc
và sau đó là free
d trong chủ đề A không thể sử dụng bằng một cuộc gọi khác là malloc
trong chủ đề B, vì luồng A và B có thể nằm trong các đấu trường khác nhau và các đấu trường khác nhau duy trì các heap khác nhau và danh sách bộ nhớ miễn phí.Trong C++, có thể mới trong một luồng phân bổ bộ nhớ bị xóa bởi một chuỗi khác không?
Khi nói đến C++ (có thể cũng C++ 11 vì C++ 11 có tiêu chuẩn mới), câu chuyện vẫn như cũ?
Hoặc các chủ đề khác nhau thực sự chia sẻ cùng một phân đoạn danh sách bộ nhớ và miễn phí, và new
trong một chuỗi có thể phân bổ bộ nhớ trước tiên new
ed và sau đó delete
d theo chuỗi khác?
Nếu câu trả lời phụ thuộc vào việc triển khai thực hiện, thì câu hỏi đặt ra là chúng được triển khai như thế nào trong các trình biên dịch C++ chính, chẳng hạn như g ++, MVC++, icc?
EDIT
Tôi nghĩ rằng câu hỏi này là hợp lệ theo nghĩa là đôi khi bạn khởi động nhiều đề và trong mỗi chủ đề bạn tự động phân bổ/deallocate một đoạn lớn của bộ nhớ cho một số lượng lớn của các đối tượng, và bạn không muốn sử dụng bộ nhớ của ứng dụng của bạn để đi ridiculously cao.
C++ không chỉ định cách thực hiện các chức năng phân bổ, chỉ những kết quả mà chúng phải tạo ra. –
Trong thực tế 'new' gọi' malloc'. Nhưng không rõ bạn đang hy vọng làm gì với thông tin đó. –
bạn có nghĩa là 'mới' được thực hiện bởi' malloc'? Chuẩn này có được chuẩn hóa không? – Allanqunzi