use posix_memalign on most Unix targets
This commit is contained in:
parent
6579ed89f0
commit
e7772f2088
1 changed files with 7 additions and 9 deletions
|
|
@ -59,10 +59,9 @@ unsafe impl GlobalAlloc for System {
|
|||
}
|
||||
|
||||
cfg_if::cfg_if! {
|
||||
// We use posix_memalign wherever possible, but not all targets have that function.
|
||||
// We use posix_memalign wherever possible, but some targets have very incomplete POSIX coverage
|
||||
// so we need a fallback for those.
|
||||
if #[cfg(any(
|
||||
target_os = "redox",
|
||||
target_os = "espidf",
|
||||
target_os = "horizon",
|
||||
target_os = "vita",
|
||||
))] {
|
||||
|
|
@ -74,12 +73,11 @@ cfg_if::cfg_if! {
|
|||
#[inline]
|
||||
unsafe fn aligned_malloc(layout: &Layout) -> *mut u8 {
|
||||
let mut out = ptr::null_mut();
|
||||
// We prefer posix_memalign over aligned_malloc since with aligned_malloc,
|
||||
// implementations are making almost arbitrary choices for which alignments are
|
||||
// "supported", making it hard to use. For instance, some implementations require the
|
||||
// size to be a multiple of the alignment (wasi emmalloc), while others require the
|
||||
// alignment to be at least the pointer size (Illumos, macOS) -- which may or may not be
|
||||
// standards-compliant, but that does not help us.
|
||||
// We prefer posix_memalign over aligned_malloc since it is more widely available, and
|
||||
// since with aligned_malloc, implementations are making almost arbitrary choices for
|
||||
// which alignments are "supported", making it hard to use. For instance, some
|
||||
// implementations require the size to be a multiple of the alignment (wasi emmalloc),
|
||||
// while others require the alignment to be at least the pointer size (Illumos, macOS).
|
||||
// posix_memalign only has one, clear requirement: that the alignment be a multiple of
|
||||
// `sizeof(void*)`. Since these are all powers of 2, we can just use max.
|
||||
let align = layout.align().max(crate::mem::size_of::<usize>());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue