팬텀 바이트 문자열
팬텀 바이트 문자열 (Phantom Byte Strings)
팬텀 바이트 문자열(phantom byte string)은 Racket의 메모리 관리자가 임의의 크기를 가진 것처럼 취급하는 작은 Racket 값이에요. 실제 메모리를 그만큼 차지하지는 않지만, 프로세스 안에서 별도의 할당자(예: 외부 라이브러리)가 할당한 메모리 크기를 가비지 컬렉션 등에 힌트로 알려주는 역할을 해요.
출처: Racket Reference
본문
팬텀 바이트 문자열은 Racket 메모리 관리자가 임의의 크기를 가진 것으로 취급하는 작은 Racket 값이에요. 그 크기는 팬텀 바이트 문자열을 만들 때, 또는 set-phantom-bytes!로 바꿀 때 지정해요.
팬텀 바이트 문자열은 Racket 메모리 관리자에게, 프로세스 안에서 메모리가 별도의 할당자(예: ffi/unsafe로 접근하는 외부 라이브러리)를 통해 할당됐다는 힌트 역할을 해요. 이 힌트는 가비지 컬렉션을 트리거하거나 current-memory-use의 결과를 계산하는 데 사용돼요.
procedure
(phantom-bytes? v) → boolean?
v : any/c
v가 팬텀 바이트 문자열이면 #t를, 그렇지 않으면 #f를 돌려줘요.
procedure
(make-phantom-bytes k) → phantom-bytes?
k : exact-nonnegative-integer?
Racket 메모리 관리자가 크기가 k 바이트인 것으로 취급하는 팬텀 바이트 문자열을 만들어요. k가 충분히 크면(그 크기가 터무니없이 크거나, custodian-limit-memory로 메모리 제한이 설치된 경우) exn:fail:out-of-memory 예외가 발생해요.
procedure
(set-phantom-bytes! phantom-bstr k) → phantom-bytes?
phantom-bstr : phantom-bytes?
k : exact-nonnegative-integer?
팬텀 바이트 문자열의 크기를, Racket 메모리 관리자가 취급하는 기준으로 조정해요.
예를 들어 phantom-bstr가 나타내는 메모리가 외부 라이브러리를 통해 해제된다면, (set-phantom-bytes! phantom-bstr 0)으로 메모리 사용량의 변화를 반영할 수 있어요.
k가 phantom-bstr의 현재 크기보다 크면, make-phantom-bytes처럼 이 함수도 exn:fail:out-of-memory를 발생시킬 수 있어요.
더 알아보기
- Operating System — 운영 체제 관련 기능 전반.