우분투 최대 스택 크기 위에 스택 사이즈 (최대 8메가바이트)를 초과 할 경우에도 상기 프로그램의 8메가바이트스택 오버플로가 발생하지 않는 이유는 무엇입니까?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
int abc[2048002];
memset(abc,0,2048002*4);
}
, 난, 8메가바이트 이상을 할당 한 것이다 바와 같이
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 62202
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 62202
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
, 세분화 오류가 발생하지 않습니다. 그럼 내가 왜 위의 시나리오에서 스택 오버플로가 안되는지 설명 할 수 있습니까?
전체 프로그램이 최적화되지 않았습니까? –
memset을 수행하지 않으면 메모리가 할당되지 않습니다. 스택 오버플로를받을 memset을 수행하십시오 –
1. 스택 크기는 8M이 아니라 8K입니다. 2. * nix 시스템은 당신이 그것을 (읽기/쓰기) 시도하지 않는 한 실제로 메모리를 할당하지 않습니다. 그래서 memset 또는 printf해야합니다. 3. 스택이 아닌'heap'에 할당하고 있습니다. – texasbruce