Document that CStrings live in the libc heap
Closes issue #17067 and improves pr #17355
This commit is contained in:
parent
9ce2c51c46
commit
6a37692ecb
@ -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
|
||||||
///
|
///
|
||||||
|
Loading…
Reference in New Issue
Block a user