Visual C++에서는 배열을 선언할때 매모리 제한으로 258257까지만 할당할 수 있다고 한다.
따라서, 1차원 배열은 [258257]이 최대이고 이차원 대략 [508][508] 삼차원은 대략 [63][63][63]까지 할당할 수 있다고한다.
그래서 직접해봤다.
다음 코드를 작성하면 이런 결과를 볼 수 있다.
#include <iostream>
using namespace std;
int main() {
int a[258258];
cin >> a[0];
return 0;
}
Unhandled exception at 0x0F3B9B32 (ucrtbased.dll) in example1.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x01042FF4).
오 정말로 스텍오버플로우가 발생한다!!!
이번엔, 배열을 258257까지 선언해보았다.
#include <iostream>
using namespace std;
int main() {
int a[258257];
cin >> a[0];
return 0;
}
Unhandled exception at 0x770AFA6E (ntdll.dll) in example1.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x00602F74).
어라????!!
대체 어디까지 줄여야 스택오버플로우가 안뜨나 해봤다.
그 크기는 항상 달랐다. 대략 250000이하부터 안전해 지는 거 같다. 왠만하면 배열을 100000이상으로 안쓰는게 좋겠다. 게다가 변수를 하나만 선언해 놓고 쓰는것도 아니니까 실질적으로 선언할 수 있는 많이 줄어들 것이다.
Dev C++에선 그 크기가 약간 다른거 같다. Dev C++을 이용해본 결과
배열을 [519828]까지 선언할 수 있었다.4byte 짜리 int 변수를 총 519828개 선언할 수 있는 것이다.
VC의 2배를 조금 넘는 크기다
#include <iostream>
#include <windows.h>
using namespace std;
int main(){
int a[519828];//519829짜리 배열은 메모리제한을 넘어선다
cin >>a[0];
system("PAUSE");
return 0;
}
왜인지는 아직 모른다. 그런데 DC로 컴파일한 결과물의 용량이 VC에 비해 상당히 큰것과 관련이 있을 지도 모르겠다.
따라서, 1차원 배열은 [258257]이 최대이고 이차원 대략 [508][508] 삼차원은 대략 [63][63][63]까지 할당할 수 있다고한다.
그래서 직접해봤다.
다음 코드를 작성하면 이런 결과를 볼 수 있다.
#include <iostream>
using namespace std;
int main() {
int a[258258];
cin >> a[0];
return 0;
}
Unhandled exception at 0x0F3B9B32 (ucrtbased.dll) in example1.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x01042FF4).
오 정말로 스텍오버플로우가 발생한다!!!
이번엔, 배열을 258257까지 선언해보았다.
#include <iostream>
using namespace std;
int main() {
int a[258257];
cin >> a[0];
return 0;
}
Unhandled exception at 0x770AFA6E (ntdll.dll) in example1.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x00602F74).
어라????!!
대체 어디까지 줄여야 스택오버플로우가 안뜨나 해봤다.
그 크기는 항상 달랐다. 대략 250000이하부터 안전해 지는 거 같다. 왠만하면 배열을 100000이상으로 안쓰는게 좋겠다. 게다가 변수를 하나만 선언해 놓고 쓰는것도 아니니까 실질적으로 선언할 수 있는 많이 줄어들 것이다.
Dev C++에선 그 크기가 약간 다른거 같다. Dev C++을 이용해본 결과
배열을 [519828]까지 선언할 수 있었다.4byte 짜리 int 변수를 총 519828개 선언할 수 있는 것이다.
VC의 2배를 조금 넘는 크기다
#include <iostream>
#include <windows.h>
using namespace std;
int main(){
int a[519828];//519829짜리 배열은 메모리제한을 넘어선다
cin >>a[0];
system("PAUSE");
return 0;
}
왜인지는 아직 모른다. 그런데 DC로 컴파일한 결과물의 용량이 VC에 비해 상당히 큰것과 관련이 있을 지도 모르겠다.
댓글
댓글 쓰기