본문 바로가기

GO

CGO를 사용하여 Golang과 CPP간 배열을 주고받는 방법 Go의 가장 큰 특징중 하나가 Cgo Package를 통해 C와 연동이 가능하다는 것이다. Cgo lets Go packages call C code. Given a Go source file written with some special features, cgo outputs Go and C files that can be combined into a single Go package. 하지만 연동 객체로 Param을 주고받기가 은근 난해해서 이참에 정리해본다. CPP에서는 Go의 자원을 사용할 수 없기에 기본적으로 CPP중심으로 연동된다. 배열을 Go에서CPP로 넘기는 경우 배열을 Cpp로 넘기는 경우 배열의 포인터와 길이를 넘겨야한다. Go func GotoCpp(items []string) { va.. 더보기
Go GC의 Memory overhead와 비용 CPU overhead와 Memory overhead의 관계와 비용에 관해 정리된 포스팅이 있어서 정리해 보고자 한다. 예시코드는 linux기반에서만 동작함을 숙지해주길 바란다. Samsara라는 cloud기업에서 작성되었으며 원제는 "Reducing Costs for Large Caches in Go: Eliminating the Memory Overhead of the Garbage Collector"이며 2022.2월에 작성된 포스팅이다. Reducing Costs for Large Caches in Go Go heap incurs a 100% memory overhead. Samsara shares how to manage the increasing cost of your Go applicatio.. 더보기
[Golang] Go GC(Gargbae Collection)에 대해 최근에 면접을 봤다. 최근에 정리한 Go 1.22 Realse에 대한 정리글을 좋게 봐주셨는데, 정작 1.22의 GC에 관련된 질문에 잘 대답하지 못했다. close()만 꼼꼼히 해준다면 개발하면서 크게 신경 쓸 부분도 아니라고 생각했고, 그래서 대강 넘겼는데... 역시 항상 자만이 화를 부른다. 아무튼 이참에 외양간 한번 고쳐보면서 어렴풋이 알고 있던 부분을 확실히 하고 가려고 한다. GO GC가 언제 발생하는지, 어떻게 동작하는지, 어떤 알고리즘을 사용하는지, 어떤 특징을 가지는지 다룰 예정이다. GC Cycle 먼저 GC의 역할에 관해 먼저 짚고 넘어가 보자. GC는 메모리의 힙(Heap)에 할당된 객체 중 더 이상 사용하지 않는 객체(Garbage)를 수거하여 Memory leak이 발생하는 것을.. 더보기
Golang 1.22 Release 변경 내용 정리 해야지해야지 하다가 어느덧 시간이 훅 지나버린 1.22.0 Release 정리글 되시겠다. (Release note) For loop for loop내부의 변수는 한번 선언된 후 재사용 했었으나, 1.22에서는 매번 선언되도록 변경되었다. 새로운 range를 제공한다. 이 개선들을 통해 아래의 두 로직은 같은 동작을 한다. // go 1.21 func main() { var wg sync.WaitGroup for _, val := range []int{0, 1, 2, 3, 4} { wg.Add(1) go func(v int, pWG *sync.WaitGroup) { defer pWG.Done() fmt.Printf("%d ", v) }(val, &wg) } wg.Wait() } //////////////.. 더보기