问题
I have a small C++ program that requires a large 2d array.
int distanceArray[282][9900000];
I am aware that a standard 32 bit console application would be unable to allocate this much memory to my process due to the 2GB cap on 32 bit applications. However, despite the fact that I have configured my compiler to use the native amd64 toolset, I still get the same error when I try to build my application:
Error C2148 total size of array must not exceed 0x7fffffff bytes
I have 16GB of RAM on my system, so I know that my physical memory should not be an issue. If my calculations are correct, this should only take up around 3GB. However, I don't understand why I can't seem to get the 64 bit compiler to work correctly. I have followed the directions on Microsoft's website that outline how to use the 64 bit compiler, but no matter what I do, i receive the same error. Any help would be greatly appreciated. Thank you!
I am aware that this question has been asked before, but the existing answers have not been helpful to me. Thank you for any attempt at helping me find my problem.
回答1:
The 64-bit PECOFF executable format used on Windows doesn't support creating executables that have a load size of greater than 2GB so you can't create statically allocated objects bigger than that. You run into a similar problem if you try create such an object on the stack using an automatically allocated object.
One possible solution would be to dynamically allocate the object:
int (*distanceArray)[9900000] = (int (*)[9900000]) calloc(282, 9900000);
Or if you want it more C++'ish and don't need it to be zero initialized like a statically allocated array would be:
int (*distanceArray)[9900000] = new int[282][9900000];
回答2:
As suggested by MSalters, an std::vector<std::vector<int>>
was definitely the way to go.
For anyone who is still having this problem, here is how I initialized it:
std::vector<std::vector<int>> distanceArray(282, std::vector<int>(9000000, -1));
9,000,000 columns are created within every row of 282 items, and each value is initialized to -1 at the start.
Thanks to everyone who commented for the help!
来源:https://stackoverflow.com/questions/42173040/error-total-size-of-array-must-not-exceed-0x7fffffff-bytes