2012-06-09 37 views
11

Làm thế nào người ta có thể biết, được đưa ra một con trỏ void *, kích thước của một khối được phân bổ trên địa chỉ này (trước đây được phân bổ bằng cách sử dụng malloc; trong Linux và Windows) là gì? Tôi hy vọng cả hai hệ thống chắc chắn lưu trữ loại thông tin này ở đâu đó. Tức là, thay thế malloc_size tồn tại trên OSX/Darwin. Sử dụng gcc/mingw nếu nó giúp.thay thế malloc_size trên Linux và Windows

+0

Tôi nghĩ rằng kích thước được lưu trữ cùng với các chất liệu khác trong một số loại struct chỉ ngay trước khi con trỏ được cho bạn bởi malloc. Nếu không, nó có thể là một con trỏ đến cấu trúc như vậy, vì 'free()' sẽ cần dữ liệu như vậy. – nhahtdh

+0

@nhahtdh Vâng, tôi cũng hy vọng như vậy, nhưng tôi cần nó chính xác. – Cartesius00

+0

@ James, bạn sẽ làm gì nếu tôi khởi chạy ứng dụng của mình với trình phân bổ tùy chỉnh của tôi trên Linux? Giống như 'LD_PRELOAD = my_super_allocator.so./Your_app'? Ý tôi là nếu bạn nghĩ rằng có một cấu trúc định trước đằng sau 'void *'. –

Trả lời

12

Trên Windows, điều mà sử dụng MS CRT có thể sử dụng _msize, trên Linux bạn có thể thử malloc_usable_size ...

+0

Xem thêm: http://blogs.msdn.com/b/oldnewthing/archive/2012/03/16/10283988.aspx – Anders

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