프로세스 메모리 관련 에러

규규·2024년 3월 4일
0

프로그래밍

목록 보기
4/4

프로세스 메모리 구조 기초

https://meoru-tech.tistory.com/25

에러 출력

  • Stackoverflow 에러
    • Window : Process finished with exit code -1073741571 (0xC00000FD)
    • Linux : Process finished with exit code 139 (interrupted by signal 11:SIGSEGV)
  • Heap 영역 에러 Std::bad_alloc
    • 원인:
      1. Memory allocation failure : RAM size 이상만큼 memory 할당 시 에러 발생.
      2. RAM-consuming tasks in Bedtools(?)
      3. Memory corruption
    • ex :
      terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc

출처:

Segmentation error 란

  1. Segmentation Fault(이하:Segfault) 정의
  • 프로그램이 동작 중 잘못된 주소를 참조할 때 발생하는 오류이다.
  1. 대표적인 Segmentation Fault(Segfault) 발생 조건
    1) 읽기 전용 메모리 영역에 데이터를 쓰려고 할 때
    2) 운영 체제 메모리 영역 또는 보호된 메모리 데이터를 쓰려고 할 때
    3) 잘못된 메모리 영역을 접근하려고 할 때
    Ex) NULL, -1, 등등
    4) Stackover flow (너무 큰 전역 변수 array, recursive function)

추가 내용은 아래 출처로..

출처:
https://doitnow-man.tistory.com/entry/Segfault-%EA%B8%B0%EC%B4%88-%ED%8E%B8-Linux%EC%9D%98-Segmentation-FaultSegfault-%EB%B6%84%EC%84%9D-%EB%B0%A9%EB%B2%95

Stack size

  • Stack size 는 Compile time 에 크기 결정 됨. (CMakeLists.txt 에서도 설정 가능)
  • 윈도우에서 C++ 기본 stack size 는 1MB, 리눅스는 8MB (리눅스에서 ulimit -s 명령어로 stack size 확인 가능)
  • 힙,스택은 기본적으로 사용자 지정에 의해 최대 크기 정할 수 있음. RAM 메모리 크기만큼까지 도 할당 가능.

출처:
https://bozeury.tistory.com/entry/%ED%9E%99Heap%EA%B3%BC-%EC%8A%A4%ED%83%9DStack%EC%9D%98-%EC%B5%9C%EB%8C%80-%ED%81%AC%EA%B8%B0

CLion stack size 조절

CMakeList.txt 에 다음 링커 플래그를 추가

MATH(EXPR stack_size "16 * 1024 * 1024") # 16 Mb
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--stack,${stack_size}")

출처 :
https://stackoverflow.com/questions/43326924/increasing-stack-size-for-c-program-in-clion

profile
복습용 저장소

0개의 댓글