Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 4913884

Browse files
committedMay 19, 2024
use posix_memalign on most Unix targets
1 parent b3ed7df commit 4913884

File tree

1 file changed

+7
-9
lines changed

1 file changed

+7
-9
lines changed
 

‎std/src/sys/pal/unix/alloc.rs

+7-9
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,9 @@ unsafe impl GlobalAlloc for System {
5959
}
6060

6161
cfg_if::cfg_if! {
62-
// We use posix_memalign wherever possible, but not all targets have that function.
62+
// We use posix_memalign wherever possible, but some targets have very incomplete POSIX coverage
63+
// so we need a fallback for those.
6364
if #[cfg(any(
64-
target_os = "redox",
65-
target_os = "espidf",
6665
target_os = "horizon",
6766
target_os = "vita",
6867
))] {
@@ -74,12 +73,11 @@ cfg_if::cfg_if! {
7473
#[inline]
7574
unsafe fn aligned_malloc(layout: &Layout) -> *mut u8 {
7675
let mut out = ptr::null_mut();
77-
// We prefer posix_memalign over aligned_malloc since with aligned_malloc,
78-
// implementations are making almost arbitrary choices for which alignments are
79-
// "supported", making it hard to use. For instance, some implementations require the
80-
// size to be a multiple of the alignment (wasi emmalloc), while others require the
81-
// alignment to be at least the pointer size (Illumos, macOS) -- which may or may not be
82-
// standards-compliant, but that does not help us.
76+
// We prefer posix_memalign over aligned_malloc since it is more widely available, and
77+
// since with aligned_malloc, implementations are making almost arbitrary choices for
78+
// which alignments are "supported", making it hard to use. For instance, some
79+
// implementations require the size to be a multiple of the alignment (wasi emmalloc),
80+
// while others require the alignment to be at least the pointer size (Illumos, macOS).
8381
// posix_memalign only has one, clear requirement: that the alignment be a multiple of
8482
// `sizeof(void*)`. Since these are all powers of 2, we can just use max.
8583
let align = layout.align().max(crate::mem::size_of::<usize>());

0 commit comments

Comments
 (0)
Failed to load comments.