2011-01-28 3 views
0

나는이 질문을하고 있는데 왜냐하면 나는 gpus에서 cuda로 프로그래밍하고 있기 때문입니다. 공유 메모리가 16kb, 따라서 내가 만들 수있는 최대 크기의 정수 배열을 알아야합니까?
4GB 메모리가있는 경우 (3,000,000 개의 정수)에 대한 큰 배열을 만들 수도 있습니다? 이것을 계산하는 올바른 방법은 무엇입니까? 32 비트 OS에서는 4 바이트이고 64 비트 시스템에서는 8B 인 정수입니까? 따라서 64 비트 OS에서 동일한 정수 배열은 32 비트 OS보다 두 배의 메모리 공간을 차지합니까? 기억 공간 계산에 관해서 나는 잃어버린 느낌이 든다 ... 누군가 "튜토리얼"이 될 수 있을까? 내가 프로그래밍 언어로 C를 사용하고얼마나 많은 정수가 16kb 배열에 있습니까

...

정수가 32 또는 64 비트 (또는 뭔가 다른) 프로세서, OS, 컴파일러 설정에 따라뿐만 아니라 정확한 데이터가 있는지 여부
+0

어떤 프로그래밍 언어를 사용하고 있습니까? '정수'는 다른 언어로 된 사물 (그리고 다른 크기)을 의미합니다. –

+0

저장해야하는 가장 큰 정수의 크기에 따라 달라질 수 있습니까? – Benjamin

+0

정수에 따라 다릅니 까? 그래서 5는 100보다 적은 공간을 차지할 것인가? – tana

답변

1

당신을 입력 사용하고 있습니다. int은 공통 플랫폼에서 32 비트이고 long long은 64입니다. 무엇이 long인지는 다양합니다. x86 Linux의 경우 32 비트 컴퓨터에서는 32 비트이고 64 비트 컴퓨터에서는 64 비트입니다. 나는 윈도우가 뭔가 다른 것을한다고 생각한다. 컴퓨팅 크기면에서 배열의 바이트 수는 size * sizeof(T)에 의해 결정됩니다. 16kB 메모리는 4k 32 비트 정수 또는 2k 64 비트 정수를 저장할 수 있으며, 3M 요소 배열은 32 비트 정수의 경우 12MB를 차지합니다. 64 비트의 경우 24MB입니다. 하드웨어와 독립적으로 데이터 크기를 선택할 수 있습니다. C99의 <stdint.h>을보고 특정 비트 크기를 갖는 정수 유형을 얻을 수도 있습니다.

+0

그래서 더 많은 메모리가 필요하면 항상 32 비트 OS를 사용해야합니까? – tana

+0

64 비트 OS에서 32 비트 정수 유형을 사용할 수 있습니다. 특히 'int'는 64 비트 운영체제에서도 64 비트 x86 시스템에서는 기본적으로 32 비트입니다. 64 비트 OS를 사용하면 시스템에 많은 메모리가있는 경우 더 많은 메모리 (32 비트 응용 프로그램의 경우 2GiB 또는 3GiB 이상)에 액세스 할 수 있습니다. –

관련 문제