Document that CStrings live in the libc heap

Closes issue #17067 and improves pr #17355
This commit is contained in:
gamazeps 2014-09-18 12:13:30 +02:00
parent 9ce2c51c46
commit 6a37692ecb

View File

@ -36,10 +36,10 @@ not tied to the lifetime of the original string/data buffer). If C strings are
heavily used in applications, then caching may be advisable to prevent heavily used in applications, then caching may be advisable to prevent
unnecessary amounts of allocations. unnecessary amounts of allocations.
Be carefull to remember that the memory is managed by libc's malloc and not Be carefull to remember that the memory is managed by C allocator API and not
by jemalloc which is the 'normal' rust memory allocator. by Rust allocator API.
That means that the CString pointers should only be freed with That means that the CString pointers should only be freed with C allocator API
alloc::libc_heap::malloc_raw if you intend to do that on your own. if you intend to do that on your own.
An example of creating and using a C string would be: An example of creating and using a C string would be:
@ -97,7 +97,7 @@ pub struct CString {
impl Clone for CString { impl Clone for CString {
/// Clone this CString into a new, uniquely owned CString. For safety /// Clone this CString into a new, uniquely owned CString. For safety
/// reasons, this is always a deep clone with the memory allocated /// reasons, this is always a deep clone with the memory allocated
/// with libc's malloc, rather than the usual shallow clone. /// with C's allocator API, rather than the usual shallow clone.
fn clone(&self) -> CString { fn clone(&self) -> CString {
let len = self.len() + 1; let len = self.len() + 1;
let buf = unsafe { malloc_raw(len) } as *mut libc::c_char; let buf = unsafe { malloc_raw(len) } as *mut libc::c_char;
@ -136,8 +136,9 @@ impl<S: hash::Writer> hash::Hash<S> for CString {
} }
impl CString { impl CString {
/// Create a C String from a pointer, with memory managed by libc's malloc, /// Create a C String from a pointer, with memory managed by C's allocator
/// so do not call it with a pointer allocated by jemalloc. /// API, so do not call it with a pointer to memory managed by Rust's
/// allocator API.
/// ///
///# Failure ///# Failure
/// ///