alloca(3) - wariua/manpages-ko GitHub Wiki

NAME

alloca - μžλ™μœΌλ‘œ ν•΄μ œλ˜λŠ” λ©”λͺ¨λ¦¬ ν• λ‹Ήν•˜κΈ°

SYNOPSIS

#include <alloca.h>

void *alloca(size_t size);

DESCRIPTION

alloca() ν•¨μˆ˜λŠ” 호좜자의 μŠ€νƒ ν”„λ ˆμž„μ— size λ°”μ΄νŠΈμ˜ 곡간을 ν• λ‹Ήν•œλ‹€. alloca()λ₯Ό ν˜ΈμΆœν–ˆλ˜ ν•¨μˆ˜κ°€ 자기 ν˜ΈμΆœμžμ—κ²Œ λ°˜ν™˜ν•  λ•Œ κ·Έ μž„μ‹œ 곡간이 μžλ™μœΌλ‘œ ν•΄μ œλœλ‹€.

RETURN VALUE

alloca() ν•¨μˆ˜λŠ” ν• λ‹Ήλœ κ³΅κ°„μ˜ μ‹œμž‘μ μ— λŒ€ν•œ 포인터λ₯Ό λ°˜ν™˜ν•œλ‹€. ν• λ‹ΉμœΌλ‘œ 인해 μŠ€νƒ μ˜€λ²„ν”Œλ‘œμš°κ°€ λ°œμƒν•˜λŠ” 경우 ν”„λ‘œκ·Έλž¨ λ™μž‘ 방식은 κ·œμ •λ˜μ–΄ μžˆμ§€ μ•Šλ‹€.

ATTRIBUTES

이 μ ˆμ—μ„œ μ‚¬μš©ν•˜λŠ” μš©μ–΄λ“€μ— λŒ€ν•œ μ„€λͺ…은 attributes(7)λ₯Ό 보라.

μΈν„°νŽ˜μ΄μŠ€ 속성 κ°’
alloca() μŠ€λ ˆλ“œ μ•ˆμ „μ„± MT-Safe

CONFORMING TO

POSIX.1μ—λŠ” 이 ν•¨μˆ˜κ°€ μ—†λ‹€.

32V, PWB, PWB.2, 3BSD, 4BSD에 alloca() ν•¨μˆ˜κ°€ λ“±μž₯ν–ˆλ‹€λŠ” 증거가 μžˆλ‹€. 4.3BSD에 맨 νŽ˜μ΄μ§€κ°€ μžˆλ‹€. λ¦¬λˆ…μŠ€μ—μ„œλŠ” GNU 버전을 μ‚¬μš©ν•œλ‹€.

NOTES

alloca() ν•¨μˆ˜λŠ” λ¨Έμ‹  의쑴적이고 컴파일러 μ˜μ‘΄μ μ΄λ‹€. μ–΄λ–€ μ‘μš©λ“€μ—μ„œλŠ” 이λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 malloc(3)κ³Ό free(3)λ₯Ό μ‚¬μš©ν•˜λŠ” 것에 λΉ„ν•΄ νš¨μœ¨μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€. μ–΄λ–€ κ²½μš°μ—λŠ” longjmp(3)λ‚˜ siglongjmp(3)λ₯Ό μ“°λŠ” μ‘μš©μ—μ„œ λ©”λͺ¨λ¦¬ ν•΄μ œκ°€ λ‹¨μˆœν•΄μ§€κΈ°λ„ ν•œλ‹€. κ·Έ μ™Έμ˜ κ²½μš°μ—λŠ” μ‚¬μš©μ„ κΆŒν•˜μ§€ μ•ŠλŠ”λ‹€.

alloca()둜 ν• λ‹Ήν•œ 곡간이 μŠ€νƒ ν”„λ ˆμž„μ—μ„œ ν• λ‹Ήλ˜κΈ° λ•Œλ¬Έμ— longjmp(3)λ‚˜ siglongjmp(3) 호좜둜 ν•¨μˆ˜ λ°˜ν™˜μ„ κ±΄λ„ˆλ›°μ–΄λ„ κ·Έ 곡간이 μžλ™μœΌλ‘œ ν•΄μ œλœλ‹€.

alloca()둜 ν• λ‹Ήν•œ 곡간을 κ°€λ¦¬ν‚€λŠ” ν¬μΈν„°μ˜ μŠ€μ½”ν”„λ₯Ό λ²—μ–΄λ‚  λ•Œ κ·Έ 곡간이 μžλ™μœΌλ‘œ ν•΄μ œλ˜λŠ” 게 μ•„λ‹ˆλ‹€.

alloca()둜 ν• λ‹Ήν•œ 곡간을 free(3) ν•΄μ„œλŠ” μ•ˆ λœλ‹€!

GNU 버전에 λŒ€ν•œ μ°Έκ³  사항

보톡은 gcc(1)κ°€ alloca() ν˜ΈμΆœμ„ 인라인 μ½”λ“œλ‘œ λ³€ν™˜ν•œλ‹€. -ansiλ‚˜ -std=c89, -std=c99, -std=c11 μ˜΅μ…˜μ„ μ£Όκ³  <alloca.h> 헀더λ₯Ό 포함 μ•ˆ ν•˜λ©΄ λ³€ν™˜μ΄ 이뀄지지 μ•ŠλŠ”λ‹€. κ·ΈλŸ¬μ§€ μ•ŠμœΌλ©΄ (-ansiλ‚˜ -std=c* μ˜΅μ…˜μ΄ μ—†μœΌλ©΄) glibc 버전 <stdlib.h>μ—μ„œ <alloca.h>λ₯Ό ν¬ν•¨μ‹œν‚€λŠ”λ° κ·Έ νŒŒμΌμ— λ‹€μŒ 행이 μžˆλ‹€.

#ifdef __GNUC__
#define alloca(size)   __builtin_alloca (size)
#endif

κ·Έλž˜μ„œ 이 ν•¨μˆ˜μ˜ 자체 버전을 κ°€μ§€κ³  있으면 상황이 λ³΅μž‘ν•΄μ§„λ‹€.

μ½”λ“œκ°€ 인라인 λœλ‹€λŠ” 것은 이 ν•¨μˆ˜μ˜ μ£Όμ†Œλ₯Ό μ–»λŠ” 것이, 그리고 λ‹€λ₯Έ 라이브러리λ₯Ό 링크 ν•΄μ„œ ν•¨μˆ˜μ˜ λ™μž‘ 방식을 λ°”κΎΈλŠ” 것이 λΆˆκ°€λŠ₯ν•˜λ‹€λŠ” μ˜λ―Έμ΄λ‹€.

λ§Žμ€ κ²½μš°μ—μ„œ 인라인 된 μ½”λ“œλŠ” μŠ€νƒ 포인터λ₯Ό μ‘°μ •ν•˜λŠ” μΈμŠ€νŠΈλŸ­μ…˜ ν•œ 개둜 이뀄져 있고 μŠ€νƒ μ˜€λ²„ν”Œλ‘œμš°λ₯Ό κ²€μ‚¬ν•˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ NULL 였λ₯˜ λ°˜ν™˜μ΄ μ—†λ‹€.

BUGS

μŠ€νƒ ν”„λ ˆμž„μ„ ν™•μž₯ν•  수 μ—†λŠ” 경우 였λ₯˜ ν‘œμ‹œκ°€ μ—†λ‹€. (ν•˜μ§€λ§Œ μ•„λ§ˆ ν• λ‹Ή μ‹€νŒ¨ 후에 ν”„λ‘œκ·Έλž¨μ΄ ν• λ‹Ή μ•ˆ 된 곡간에 μ ‘κ·Όν•˜λ € ν•˜λ©΄μ„œ SIGSEGVλ₯Ό λ°›κ²Œ 될 것이닀.)

λ§Žμ€ μ‹œμŠ€ν…œμ—μ„œλŠ” ν•¨μˆ˜ 호좜의 인자 λͺ©λ‘ λ‚΄μ—μ„œ alloca()λ₯Ό μ‚¬μš©ν•  수 μ—†λŠ”λ°, 그러면 alloca()κ°€ μ˜ˆμ•½ν•œ 곡간이 μŠ€νƒμ—μ„œ ν•¨μˆ˜ μΈμžλ“€μ„ μœ„ν•œ 곡간 쀑간에 있게 될 것이기 λ•Œλ¬Έμ΄λ‹€.

SEE ALSO

brk(2), longjmp(3), malloc(3)


2019-03-06

⚠️ **GitHub.com Fallback** ⚠️