// main.go
package main
// #include <stdlib.h>
import "C"
import (
"runtime/debug"
"unsafe"
)
func main() {
// disable garbage collection
debug.SetGCPercent(-1)
ptr := unsafe.Pointer(C.malloc(C.size_t(0x10)))
C.free(ptr)
}
되긴 됨
물론 코드 중에 힙 메모리 할당하는 곳이 있으면
runtime.GC() 호출해서 수동으로 GC해줘야 됨
(syscall.MMap으로 할당한 건 syacall.MUnMap으로 해제 가능)
힙으로 가는 게 있는지는 컴파일 시 -gcflags -m 옵션으로 검사 가능
멈춰~~
어째서
대체 왜 이런짓을 하는것이지
GC 오버헤드 때문에 가끔 저런 코드 쓸 때가 있는데, GC 오버헤드가 문제가 되는 순간부터 managed 언어 쓰는 거 자체가 문제라고 봄
gc오버헤드가 문제되는 경우는 언제인가요?
latency를 쭉 낮게 유지해야하는 경우 (메시지 읽으면 즉시 '읽음' 처리가 돼야한다던지)
이거 포인터타입변환 ㅈ같음
포인터 arithmetic
그만큼 안하는 게 좋다는거죵 ^<^
맞워용 go로 파이썬 익스텐션 만들다가 자살할뻔함 ㅎㅎ
Go에서 GC가 문제되면 메모리를 2배로 박던가 RIIR 하라던데