分段错误(核心转储)C++,因为我使用了大量内存
Segmentation fault (core dumped) C++ as I use a lot of memory
在 C++ 中,我使用我的 'user' class,我的代码只有以下 3 行:
cout<<"size of user = "<<sizeof(user)<<endl; //prints 160
cout<<"size of all users = "<<NUM_OF_USERS*sizeof(user)<<endl;
user users[NUM_OF_USERS]; //creates an array of users of size NUM_OF_USERS.
当 NUM_OF_USERS 只有 10,000 时,它工作正常(甚至我的所有程序都工作正常)。但是当我将它增加到 1000,000 时,它会出现以下错误(仅针对这 3 行代码)。
Segmentation fault (core dumped)
所以,没有其他问题(没有指针或任何东西)。问题是这个 class 的这么多对象没有内存(需要 16,000,000 字节 = 16MB)。
我使用的是一台内存很大的 UNIX 机器,所以我认为 16 MB 并不多。那么,如何增加分配给这个特定进程的内存?
数据分配在堆栈上。堆栈的大小有限,无法调整大小。使用 std::vector
或 new[]
.
在堆上分配如此大的块
在 C++ 中,我使用我的 'user' class,我的代码只有以下 3 行:
cout<<"size of user = "<<sizeof(user)<<endl; //prints 160
cout<<"size of all users = "<<NUM_OF_USERS*sizeof(user)<<endl;
user users[NUM_OF_USERS]; //creates an array of users of size NUM_OF_USERS.
当 NUM_OF_USERS 只有 10,000 时,它工作正常(甚至我的所有程序都工作正常)。但是当我将它增加到 1000,000 时,它会出现以下错误(仅针对这 3 行代码)。
Segmentation fault (core dumped)
所以,没有其他问题(没有指针或任何东西)。问题是这个 class 的这么多对象没有内存(需要 16,000,000 字节 = 16MB)。
我使用的是一台内存很大的 UNIX 机器,所以我认为 16 MB 并不多。那么,如何增加分配给这个特定进程的内存?
数据分配在堆栈上。堆栈的大小有限,无法调整大小。使用 std::vector
或 new[]
.