Я использую 64-разрядную версию Windows 7 Pro и Visual Studio 2010 Pro.
Я пытаюсь выделить и использовать буфер размером более 4 ГБ (для захвата данных с высокой скоростью передачи данных).
Выделение и запись буфера как вектора байтов работает нормально. Выделение буфера в виде массива байтов работает нормально, но запись в этот массив происходит быстро. (Последнее напечатанное сообщение: «выделен буфер».)
Комментирование векторного раздела не решает проблему.
Вот моя тестовая программа:
#include <iostream>
#include <vector>
#include <BaseTsd.h>
using namespace std;
int main() {
const ULONG64 BUF_SIZE = 4 * 1024ULL * 1024ULL * 1024ULL;
{
vector<unsigned __int8> v(BUF_SIZE);
cout << "vector allocated" << endl;
for (ULONG64 i = 0; i < BUF_SIZE; ++i) {
v[i] = 0xff;
}
cout << "vector written" << endl;
}
{
unsigned __int8* buffer = new unsigned __int8[BUF_SIZE];
cout << "buffer allocated" << endl;
for (ULONG64 i = 0; i < BUF_SIZE; ++i) {
buffer[i] = 0xff;
}
cout << "buffer written" << endl;
delete[] buffer;
}
return 0;
}
ОБНОВЛЕНИЕ: Я считаю, что это ошибка компилятора. Посмотреть здесь:
http://connect.microsoft.com/VisualStudio/feedback/details/553756/invalid-check-for-maximum-array-size-in-x64-compiler-c2148