posix_memalign(3) - wariua/manpages-ko GitHub Wiki
posix_memalign, aligned_alloc, memalign, valloc, pvalloc - μ λ ¬λ λ©λͺ¨λ¦¬ ν λΉνκΈ°
#include <stdlib.h>
int posix_memalign(void **memptr, size_t alignment, size_t size);
void *aligned_alloc(size_t alignment, size_t size);
void *valloc(size_t size);
#include <malloc.h>
void *memalign(size_t alignment, size_t size);
void *pvalloc(size_t size);
glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
posix_memalign()
: _POSIX_C_SOURCE >= 200112L
-
aligned_alloc()
: _ISOC11_SOURCE
-
valloc()
: -
- glibc 2.12λΆν°:
-
(_XOPEN_SOURCE >= 500) && !(_POSIX_C_SOURCE >= 200112L)
|| /* glibc 2.19λΆν°: */ _DEFAULT_SOURCE
|| /* glibc λ²μ <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
- glibc 2.12 μ :
-
_BSD_SOURCE || _XOPEN_SOURCE >= 500
>>
((λΉνμ€) ν€λ νμΌ<malloc.h>
λvalloc()
μ μΈμ λλ¬λΈλ€. μ΄λ€ κΈ°λ₯ νμΈ λ§€ν¬λ‘λ νμνμ§ μλ€.)
posix_memalign()
ν¨μλ size
λ°μ΄νΈλ₯Ό ν λΉνμ¬ ν λΉν λ©λͺ¨λ¦¬μ μ£Όμλ₯Ό *memptr
μ λ£λλ€. ν λΉν λ©λͺ¨λ¦¬μ μ£Όμκ° alignment
μ λ°°μκ° λλ€. alignment
λ 2μ κ±°λμ κ³±μ΄μ΄μΌ νλ©° sizeof(void *)
μ λ°°μμ¬μΌ νλ€. size
κ° 0μΈ κ²½μ° *memptr
μ λ£λ κ°μ NULLμ΄κ±°λ, μ΄ν free(3)μ 무μ¬ν μ λ¬ν μ μλ κ³ μ ν ν¬μΈν° κ°μ΄λ€.
ꡬμ ν¨μ memalign()
μ size
λ°μ΄νΈλ₯Ό ν λΉνμ¬ ν λΉλ λ©λͺ¨λ¦¬μ λν ν¬μΈν°λ₯Ό λ°ννλ€. λ©λͺ¨λ¦¬ μ£Όμκ° alignment
μ λ°°μκ° λλ€. alignment
λ 2μ κ±°λμ κ³±μ΄μ΄μΌ νλ€.
aligned_alloc()
ν¨μλ memalign()
κ³Ό λμΌνλ size
κ° alignment
μ λ°°μμ¬μΌ νλ€λ μ μ½μ΄ μΆκ°λλ€.
ꡬμ ν¨μ valloc()
μ size
λ°μ΄νΈλ₯Ό ν λΉνμ¬ ν λΉλ λ©λͺ¨λ¦¬μ λν ν¬μΈν°λ₯Ό λ°ννλ€. λ©λͺ¨λ¦¬ μ£Όμκ° νμ΄μ§ ν¬κΈ°μ λ°°μκ° λλ€. memalign(sysconf(_SC_PAGESIZE),size)
μ λλ±νλ€.
ꡬμ ν¨μ pvalloc()
μ valloc()
κ³Ό μ μ¬νλ ν λΉ ν¬κΈ°λ₯Ό μμ€ν
νμ΄μ§ ν¬κΈ°μ λ°°μλ‘ μ¬λ¦Ό νλ€.
μ΄ ν¨μλ€ λͺ¨λ λ©λͺ¨λ¦¬λ₯Ό 0μΌλ‘ μ±μ°μ§ μλλ€.
μ±κ³΅ μ aligned_alloc()
, memalign()
, valloc()
, pvalloc()
μ ν λΉν λ©λͺ¨λ¦¬μ λν ν¬μΈν°λ₯Ό λ°ννλ€. μ€λ₯ μ NULLμ λ°ννλ©° μ€λ₯ μμΈμ λνλ΄λλ‘ errno
λ₯Ό μ€μ νλ€.
posix_memalign()
μ μ±κ³΅ μ 0μ λ°ννκ³ μ€ν¨ μ λ€μ μ μ λμ΄ν μ€λ₯ κ°λ€ μ€ νλλ₯Ό λ°ννλ€. errno
κ°μ μ€μ νμ§ μλλ€. 리λ
μ€μμλ (κ·Έλ¦¬κ³ λ€λ₯Έ μμ€ν
λ€μμλ) μ€ν¨ μ posix_memalign()
μ΄ memptr
μ λ³κ²½νμ§ μλλ€. μ΄λ° λμ λ°©μμ νμ€νν μꡬ μ¬νμ΄ POSIX.1-2016μ μΆκ°λμλ€.
EINVAL
-
alignment
μΈμκ° 2μ κ±°λμ κ³±μ΄ μλκ±°λsizeof(void *)
μ λ°°μκ° μλλ€. ENOMEM
- ν λΉ μμ²μ μΆ©μ‘±ν μΆ©λΆν λ©λͺ¨λ¦¬κ° μλ€.
리λ
μ€μ λͺ¨λ libc λΌμ΄λΈλ¬λ¦¬λ€μμ memalign()
, valloc()
, pvalloc()
ν¨μκ° λ μ¬μ© κ°λ₯νλ€.
glibc λ²μ 2.16μμ aligned_alloc()
ν¨μκ° μΆκ°λμλ€.
glibc 2.1.91λΆν° posix_memalign()
ν¨μκ° μ¬μ© κ°λ₯νλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
μΈν°νμ΄μ€ | μμ± | κ° |
---|---|---|
aligned_alloc() ,memalign() ,posix_memalign()
|
μ€λ λ μμ μ± | MT-Safe |
valloc() ,pvalloc()
|
μ€λ λ μμ μ± | MT-Unsafe init |
valloc()
ν¨μλ 3.0BSDμμ λ±μ₯νλ€. 4.3BSDμμ ꡬμμΌλ‘, κ·Έλ¦¬κ³ SUSv2μμ legacyλ‘ μ κ³ μλ€. POSIX.1μλ λ±μ₯νμ§ μλλ€.
pvalloc()
ν¨μλ GNU νμ₯μ΄λ€.
memalign()
ν¨μλ SunOS 4.1.3μμ λ±μ₯νμ§λ§ 4.4BSDμλ μλ€.
posix_memalign()
μ POSIX.1dμμ μ¨ κ²μ΄λ©° POSIX.1-2001 λ° POSIX.1-2008μ λͺ
μΈλμ΄ μλ€.
aligned_alloc()
ν¨μλ C11 νμ€μ λͺ
μΈλμ΄ μλ€.
posix_memalign()
μ΄ <stdlib.h>
μ μ μΈλμ΄ μλ€λ κ²μλ λͺ¨λκ° λμνλ€.
μΌλΆ μμ€ν
μμλ memalign()
μ΄ <malloc.h>
κ° μλλΌ <stdlib.h>
μ μ μΈλμ΄ μλ€.
SUSv2μ λ°λ₯΄λ©΄ valloc()
μ <stdlib.h>
μ μ μΈλμ΄ μλ€. libc 4μ 5, κ·Έλ¦¬κ³ glibcμμλ <malloc.h>
μμ μ μΈνλ©°, μ μ ν κΈ°λ₯ νμΈ λ§€ν¬λ‘κ° μ μλμ΄ μμΌλ©΄ (μ μ°Έκ³ ) <stdlib.h>
μμλ μ μΈνλ€.
μ¬λ¬ μμ€ν
μμ κ°λ Ή λΈλ‘ μ₯μΉ μ§μ I/Oμ μ°λ λ²νΌλ€μ μ λ ¬ μ μ½μ΄ μλ€. POSIXμμλ μ΄λ€ μ λ ¬μ΄ νμνμ§ μλ € μ£Όλ pathconf(path,_PC_REC_XFER_ALIGN)
νΈμΆμ λͺ
μΈνλ€. κ·Έλ¬λ©΄ posix_memalign()
μ μ¬μ©ν΄ μ΄λ° μꡬ μ¬νμ μΆ©μ‘±μν¬ μ μλ€.
posix_memalign()
μ alignment
κ° μμ μμ ν μꡬ μ¬νμ λ§λμ§ κ²μ¬νλ€. memalign()
μ alignment
μΈμκ° μ¬λ°λ₯Έμ§ κ²μ¬νμ§ μμ μλ μλ€.
POSIXμμλ posix_memalign()
μκ²μ μ»μ λ©λͺ¨λ¦¬λ₯Ό free(3)λ‘ ν΄μ ν μ μμ΄μΌ νλ€κ³ μꡬνλ€. μΌλΆ μμ€ν
μμλ memalign()
μ΄λ valloc()
μΌλ‘ ν λΉν λ©λͺ¨λ¦¬λ₯Ό νμνκΈ° μν λ°©λ²μ μ 곡νμ§ μλλ€. (malloc(3)μκ²μ μ»μ ν¬μΈν°λ§ free(3)μ μ€ μ μλλ° κ°λ Ή memalign()
μμ malloc(3)μ νΈμΆν΄μ μ»μ κ°μ μ λ ¬νκ² λκΈ° λλ¬Έμ΄λ€.) glibc ꡬνμμλ μ ν¨μλ€ μ€ λ¬΄μμΌλ‘ μ»μ λ©λͺ¨λ¦¬λ μ§ free(3)λ‘ νμν μ μλ€.
glibcμ malloc(3)μ νμ 8λ°μ΄νΈμ μ λ ¬λ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό λ°ννλ€. λ°λΌμ λ ν° μ λ ¬ κ°μ΄ νμν λλ§ μ΄ ν¨μλ€μ μ°λ©΄ λλ€.
brk(2), getpagesize(2), free(3), malloc(3)
2019-05-09