Tôi đang sử dụng Windows 7 Pro 64 bit và Visual Studio 2010 Pro.Tại sao tôi có thể sử dụng bộ đệm lớn làm vectơ nhưng không có bộ đệm mới trên Windows?
Tôi đang cố gắng phân bổ và sử dụng bộ đệm lớn hơn 4 GB (để thu thập dữ liệu tốc độ dữ liệu cao).
Phân bổ và ghi bộ đệm dưới dạng vectơ byte hoạt động tốt. Phân bổ bộ đệm như một mảng các byte hoạt động tốt, nhưng việc ghi vào mảng đó sẽ bị treo nhanh chóng. (Tin nhắn cuối cùng được in là "đệm được cấp phát".)
Nhận xét phần vectơ không khắc phục được sự cố.
Sau đây là chương trình thử nghiệm của tôi:
#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;
}
UPDATE: Tôi tin rằng đây là một lỗi biên dịch. Xem ở đây: http://connect.microsoft.com/VisualStudio/feedback/details/553756/invalid-check-for-maximum-array-size-in-x64-compiler-c2148
Tôi đang sử dụng trình biên dịch 64 bit, bằng cách này, và các kết xuất/tiêu đề hiển thị '8664 máy (x64)' và 'Ứng dụng có thể xử lý các địa chỉ lớn (> 2GB)'. –
Liệu bộ đệm 'trông giống như một con trỏ hợp lý sau khi phân bổ? Tại những gì 'i' nó sụp đổ? – sth
sau khi bạn phân bổ véc tơ, bạn có thể in ra 'v.size()' để xác nhận không có biến nào bị cắt ngắn trên đường đi không? –