2010-05-16 1 views
0

32 비트 Linux 컴퓨터에서 가능한 한 큰 배열을 만들어야합니다. 내 컴퓨터에서 처리 할 수있는 가장 큰 배열 크기는 얼마입니까? 2^32입니까?컴퓨터가 처리 할 수있는 가장 큰 int 배열?

+0

가능한 복제본 [C++에는 최대 배열 길이 제한이 있습니까?] (http://stackoverflow.com/questions/216259/is-there-a-max-array-length-limit-in-c) –

+1

왜 그런 큰 배열을 만들고 싶습니까? 아마도 당신은 우리가 해결하려고하는 실제 문제를 말해야합니다 ... –

답변

3

2^31 및 2^32 어딘가에있을 거라 생각합니다. 주소 공간의 일부는 라이브러리 및 응용 프로그램 코드에서 차지할 것입니다. 하나의 프로세스는 2^32 개 이상의 메모리에 액세스 할 수 없으며 일부 OS는 특수 목적으로 주소 공간의 절반을 표시합니다. 리눅스가 이것을하는지 아닌지는 확실치 않습니다.

포인터의 크기가 32 비트이므로 수행하는 작업에 관계없이 2^32보다 큰 선형 메모리 덩어리를 얻을 수 없습니다. "선형 메모리 덩어리"가 아닌 것은 배열이라고 할 수 없습니다.

+0

이 대답은 실제로는 유용하지 않습니다. 32 비트 포인터가 주어지면 2^32보다 큰 메모리 블록을 할당 할 수 없지만 코드 카가 가지고있는 것처럼 정수 자체의 크기를 완전히 설명하지 못합니다 그의 대답에. 그가 말했듯이 실제 제한은 7 억 5 천만 개의 정수가 될 가능성이 더 높습니다. 프로그램 코드, 라이브러리 등에 대한 여지가 없기 때문에 너무 많을지라도 더 많은 질문이 있습니다. 왜 그렇습니까? user69514 실제로하려고합니까? –

+0

@Eric Melski : 1) 블록 크기를 바이트 단위로 얘기했습니다. 2) 큰 배열에 대한 이유는 중요하지 않습니다. OP가 "잘못된"것을 시도하면 결국 그는 실수를 발견하고 그로부터 유용한 것을 배울 것입니다. – SigTerm

0

Is there a max array length limit in C++?

가 2 개 한계, 물리적 메모리,하지만 그 무시, 그것은 전혀 아무 것도이 같은 방법으로, 진행되지 않도록 주어진 (2^32) -1을해야 당신 ' 실제 메모리에 의해 제한되므로 프로그램은 허용되는 것으로 제한됩니다.

+1

정확히 어디에서 프로그램 코드가이 경우에 저장 될까요? (2^32-1)? – SigTerm

2

숫자가 약 3GB라고 가정하면 (합리적인 것처럼 보임) 정수는 각각 4 바이트로 기억해야합니다. 최대 3G/4 = 약 7 억 5 천만 개 개의 정수을 기억해야합니다.

물론 3GB 상당의 어레이를 할당했다면 다른 주소 공간도 남지 않을 것입니다.

큰 숫자 배열로 작업 할 계획이라면 메모리 매핑 파일 (리눅스에서는 mmap으로 끝남)을 사용하고 파일의 작은 부분을 시간 (예 : 100MB). 즉, 크기의 데이터를 크기로 설정하면 으로 주소 공간을 절약 할 수 있습니다.