Error: Total size of array must not exceed 0x7fffffff bytes

不羁的心 提交于 2020-01-02 09:23:26

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!