2013-07-15 2 views
0

알 수없는 크기의 다차원 배열 (3D 행렬)이 있습니다.이 행렬의 각 요소는 short int입니다. 행렬의 크기는 대략 10 x 10 x 1,000,000으로 근사 될 수 있습니다.가변 배열, 목표 -c 또는 가변 배열, c. 성능 차이가 있습니까?

나는 그것을 볼 수있는 두 가지 옵션이 있습니다 : 가변 배열 (Objective-c) 또는 가변 배열 (c).

  1. 이러한 배열에 대한 읽기 쓰기에는 차이가 있습니까?
  2. 파일 저장시 파일의 크기가 얼마나됩니까?

감사의 말을 전합니다.

답변

1
  1. 것은, 당신이 창조의 시점에서 배열의 크기를 알고 제공하면, 이들 치수 short int의 C 배열을 쉽게 이길 동적 범위를 변경할 필요가 없습니다 즉, - 등의 이유로 개체로 값을 인코딩하지 않고 직접 인덱싱 할 수 있습니다.

  2. 파일에 바이너리로 배열을 쓰면 머리말없이 요소 수에 sizeof(short int)을 곱한 값이됩니다. 3 * sizeof(int) - 12 또는 24 바이트의 차원도 저장해야하는 경우.

+0

크기를 저장하면 파일 크기가 12 배, 200MB 대 2400MB가됩니다. 원래의 3D 매트릭스가 바이너리를 읽을 때 다시로드 될 것이라고 생각하면서 왜 그 옵션을 사용하고 싶습니까? – userjuicer

+0

죄송합니다. 분명히 분명하지 않았습니다. 크기 저장에는 단지 12 또는 24 바이트가 소요됩니다. 메모리에있는 배열 또는 파일에 바이너리로 저장된 배열은 하나의 긴 값 목록입니다. 그 긴리스트의 어느 요소가 각 (x, y, z) 인덱스의 값인지를 판단하기 위해서 치수가 필요합니다. 이 치수가 고정되어 있지 않으면 배열과 함께 저장해야합니다. 따라서 12 또는 24 바이트의 추가 저장 공간을 추가해야합니다. – CRD

+0

[Array Data Structure] (http://en.wikipedia.org/wiki/Array_data_structure)의 * Multidimensional arrays * 섹션에서 더 잘 설명 할 수 있습니다. – CRD

1

가변 배열은 C 배열을 기반으로하므로 속도가 느립니다 (그다지 많지는 않지만). 이 배열을 저장할 때 파일의 크기는 얼마나됩니까?

매트릭스를 불러올 수있는 방식으로 인코딩해야하기 때문에 10x10x10000000 바이트 이상이 필요합니다. 이 부분은 당신에게 달려 있습니다. 3D 배열의 경우 3D 배열을 나타 내기 위해 특수 문자/형식을 사용해야합니다. 그것은 당신이 원하는 방식에 달려 있지만, 모든 행의 모든 ​​숫자에 대해 1 바이트 + 같은 행에있는 요소들 사이에 놓을 공간에 대해 1 문자를 취합니다. + (1 NL 배열의 두 번째 차원마다 * n) + (3d 값에 대해 1 개의 다른 문자 * n * n)

각 행을 자체 파일에 고정시킨 다음 평소와 같이 열을 아래에 붙이는 것이 더 쉽습니다. 그런 다음 새 파일에서 각 요소가 두 번째 차원의 열 번호와 정렬되도록 3d 요소를 배치하기 시작합니다. 그것은 나만의 것이지만, 그것은 당신에게 달려 있습니다.

+0

위의 경우에 100 개의 목록을 100 개의 개별 파일로 저장하면 공간 효율성이 더 좋습니까? – userjuicer

+0

파일이 많을수록 공간이 넓어집니다. 그것은 말하자면, 정말로 중요하지 않습니까? 아니요, 우리는 파일 헤더/파일 이름 등의 오버 헤드에 대해 이야기하고 있습니다. 이 파일의 크기가 4096Kb보다 작 으면이 크기보다 작 으면 OS는 파일을 4096K (일명 2kb 파일은 4096kb를 대신 사용)로 정렬합니다. – Magn3s1um

+0

또한, 반바지를 텍스트 파일에 문자로 저장한다고 가정합니다. – Magn3s1um