C++ stringstream overflow at 4GB (buffer)

선파·2022년 6월 9일
0

전임자가 만든 c++ 스크립트에서 RAW 데이터를 파싱하여 buffer에 저장하다가 계속 메모리 주소가 튀는 현상이 발생했다. (bin을 파싱하여 buffer에 모두 저장 후, 마지막에 csv로 write)

디버깅하다가 원인을 못찾아 거의 반포기 상태였었는데..

파싱 데이터의 크기를 보니 다른 날짜보다 유독 컸었다.

평균적인 크기는 2.1 GB ~ 3.4 GB 였었는데 공휴일 트래픽이 많아 4.1 GB 라는 크기의 데이터가 생성되어있었다.

데이터가 크다는걸 인지하고 파싱해보니 3.9 GB까지 버퍼에 저장할때는 괜찮았는데
4.0 GB가 되는 순간 메모리가 튀었었다.

머리가 띵하여 stringstream overflow 4GB를 검색해봤다

32bit(2^32)에서는 최대 4,294,967,296 (4GB)의 메모리만 쓸 수 있다고 바로 알려주셨다.

stringstream 인스턴스 변수를 추가 생성 후 파싱 데이터를 나누어 할당하여
문제를 해결하였다.

근본적인 문제를 해결하기 위해 추후에 stringstream을 vector로 수정해야겠다.

profile
주니어 데이터 엔지니어 (D.E.)

0개의 댓글