2014-04-13 13 views
5

Tính năng bố trí có kích thước đã được đề xuất bao gồm trong C++ 1y. Tuy nhiên, tôi muốn hiểu làm thế nào để ảnh hưởng/cải thiện hiện tại C++ quản lý bộ nhớ cấp thấp?Tính năng giao dịch có kích thước trong quản lý bộ nhớ trong C++ 1y

Đề xuất này nằm trong N3778, trong đó nêu rõ về mục đích của việc này.

Với C++ 11, lập trình viên có thể định nghĩa một hàm thành viên tĩnh điều hành xóa mà phải mất một tham số kích thước cho biết kích thước của đối tượng bị xóa. Xóa toàn bộ toán tử tương đương không khả dụng. Thiếu sót này có hậu quả không may.

Bộ phân bổ bộ nhớ hiện đại thường phân bổ trong danh mục kích thước và, cho lý do hiệu quả không gian, không lưu trữ kích thước của đối tượng gần đối tượng . Deallocation sau đó yêu cầu tìm kiếm loại kích thước chứa đối tượng. Tìm kiếm này có thể tốn kém, đặc biệt khi cấu trúc dữ liệu tìm kiếm thường không có trong bộ nhớ cache . Giải pháp là để cho phép triển khai và lập trình để xác định các phiên bản có kích thước của nhà điều hành toàn cầu xóa. Trình biên dịch sẽ gọi phiên bản có kích thước tùy theo phiên bản chưa được kích hoạt khi phiên bản có kích thước có sẵn.

Cũng từ đoạn trên, nó trông giống như thông tin kích thước mà toán tử xóa yêu cầu có thể được duy trì và do đó được chuyển qua chương trình đã sử dụng. Điều này sẽ tránh bất kỳ tìm kiếm cho kích thước trong khi deallocation. Nhưng theo hiểu biết của tôi, trong khi phân bổ, quản lý bộ nhớ lưu trữ thông tin kích thước trong một số loại tiêu đề (giải thích phương pháp thẻ ranh giới trong dlmalloc), sẽ được sử dụng trong khi deallocation.

T* p = new T(); 
// Now size information would be stored in the header 
// *(char*)(p - 0x4) = size; 
// This would be used when we delete the memory????. 
delete p; 

Nếu thông tin kích thước được lưu trữ trong tiêu đề, tại sao deallocation yêu cầu tìm kiếm? Có vẻ như tôi thiếu điều gì đó hiển nhiên và không hiểu khái niệm này hoàn toàn.

Ngoài ra, cách tính năng này có thể được sử dụng trong chương trình trong khi xử lý việc quản lý bộ nhớ mức thấp trong C++. Hy vọng rằng ai đó sẽ giúp tôi hiểu khái niệm này.

+0

* "và, vì lý do hiệu quả không gian, không lưu trữ kích thước của đối tượng gần đối tượng." * Họ đang nói về các chiến lược phân bổ khác. – dyp

Trả lời

3

Như trong báo giá của bạn:

[allocators bộ nhớ hiện tại] vì lý do hiệu quả không gian, không lưu trữ kích thước của đối tượng gần đối tượng.

Tăng kích thước của mỗi phân bổ để thêm thông tin kích thước rõ ràng rõ ràng sẽ sử dụng nhiều bộ nhớ hơn các lựa chọn thay thế như lưu trữ thông tin kích thước một lần cho mỗi nhóm phân bổ hoặc cung cấp thông tin khi deallocation.

Các vấn đề liên quan