64 비트 컴퓨터에서 Linux를 사용하고 있으며 g ++ 4.8을 사용합니다.사용자 정의 할당자를 사용하여 벡터의 크기를 줄입니까?
sizeof(std::vector<float>) = 24
sizeof(std::vector<double>) = 24
sizeof(std::vector<long double>) = 24
내 질문은 : sizeof
운영자가 std::vector
반환에 적용 내 응용 프로그램 요소의 이상 1 GB
의 벡터를 필요가 없습니다 것이라는 사실을 기반으로 작은 크기와 벡터를 만들 수있는 방법이있다 ? 최적으로, 나는 16 바이트의 벡터를 가질 수있다 : 시작 (8 바이트), 현재 크기 (4 바이트) 및 현재 용량 (4 바이트)에 대한 포인터. 내 자신의 벡터를 처음부터 다시 코딩해야합니까? 아니면 사용자 정의 할당자를 사용하여 크기를 줄일 수 있습니까?
이 크기는 100TB 이상의 메모리가있는 수퍼 컴퓨터에서 작업 할 때 매우 중요합니다. 기본 클래스에서 얻을 수있는 모든 바이트가 결국 몇 TB의 메모리를 절약 할 수 있습니다.
소리가 나에게 들리 듯 ... "기본 클래스에서 얻을 수있는 모든 바이트가 결국 몇 TB의 메모리를 절약 할 수 있습니다."몇 백만 개의 벡터가 있다면 ... 예 ... 벡터의 요소는 아니지만 벡터 그 자체. 당신은 벡터가 1GB 이상의 요소를 가지지 않을 것이라고 말합니다 ...당신이 주장하는 벡터의 수와 같은 것이 있다면, 당신이 이야기하는 총 메모리의 100TB- 규모를 감안할 때, 수백 바이트 이상을 평균 할 수 없으며, 따라서 수백 개의 요소를 평균화 할 수 없습니다. –
예 수천 개의 코어에 수십억 개의 벡터가 배포 될 수 있습니다. 구현을 다시 생각하려고 노력 하겠지만 쉽지는 않습니다. – Vincent
이 경우, 힙 할당 라이브러리가 벡터 당 많은 추가 공간을 낭비하는지 여부를 매우주의 깊게 살펴야합니다. 벡터의 많은 부분이 비어 있거나 하나의 요소가 많은 것처럼 들리므로 몇 개의 센티넬 값 (아마도 NaN, 무한대)을 남겨 둘 수 있다면 단일 값으로 비어 있지 않은 비어있는 단일 문자를 인코딩 할 수 있습니다 적절한 벡터가 필요한 요소와 센티넬. –