힙 메모리 오류 발생시키기
글쓴이: dudtkd4567 / 작성시간: 목, 2019/04/11 - 11:06오전
메모리 할당 가능한 최대 크기를 테스트하고 싶어서
일부러 오류를 일으켜 봤습니다.
기본적으로 스텍, 힙 둘다 1MB가 잡혀있기 때문에 그 이상을 잡으려 하면 오류가 납니다.
[스텍]
char test[10000000];
[힙]
char* test = (char*)malloc(10000000);
근데 스텍은 이렇게 하면 런타임 오류가 뜨는데,
힙은 몇천만Byte를 넣든(int범위내) 별 문제 없이 되더라고요.
힙을 고의로 메모리 과다할당 시켜서 오류뜨게 하려면 어떻게 해야 되나요?
Forums:
비슷한 질문과 답변이 있네요
비슷한 질문과 답변이 있네요
https://stackoverflow.com/questions/8367001/how-to-check-heap-size-for-a-process-on-linux
메모리를 malloc말고 new로 잡아보세요 될거에요
냉무..
할당만 하면
실제 할당을 안합니다.
할당후 사용해야 됩니다. 즉, 값을 써 넣어야죠.
그리고 그런 큰 사이즈로는 안될거고, 그 크기에서부터 시작해서 줄이면서 계속 할당을 해야죠
메모리상에 그렇게 연속적인 공간은 거의 없으니까요.
스택은 크기가 정해져 있습니다.
스택은 크기가 정해져 있습니다.
이 한계를 벗어나면 스택 오버플로우가 나게 되죠.
힙 메모리는 물리적 메모리가 허용하는 한 임의로 할당할 수 있죠.
뭔가 촛점이 어긋난 것 같습니다.
뭔가 촛점이 어긋난 것 같습니다.
기술적으로 말한다면, 가상 메모리에 연속적인 공간이 충분하고 물리 메모리(disk swap 포함)에 쓰지 않는 공간의 합이 충분할 때까지겠죠.
rich OS 에선 on-demand alloc 을 제공하는데, 물리 메모리 공간은 나중에 실제로 접근하려 할 때 매핑하기로하고 일단 가상 메모리 공간만 alloc 합니다.
뭐가 어찌됐건 간에 OS 수준에서 사용자 malloc 을 제한하는 것과 비스무리한 상황이라면 (리눅스를 예로 들면 ulimit -m 을 unlimited 에서 1MiB 로 바꿨다면),
물리 메모리 공간 어쩌고 on-demand alloc 어쩌고 매핑 어쩌고 등등 다 때려 치고,
가상 메모리 공간의 alloc 부터 제한이 가해져야하지 않겠냐 ... 라는게 질문의 내용 같습니다만.
(물론, 진짜 리눅스였다면 어플의 stack 이건 heap 이건 OS 레벨에선 똑같은 malloc 이니 힙이 어쩌고 스택이 어쩌고 따지는게 의미 없겠지만요.)
댓글 달기