排序大数组对
Sorting large array of pairs
我需要一个算法,根据每对的第一个元素对数组进行排序。下面的代码对于v_size<~2^19运行良好,但是,当大小接近2^19时,由于分割错误,它崩溃了。原因是什么?~524000的大小并不大。(我正在使用gcc (Debian 4.7.2-5) 4.7.2)
#include <iostream>
#include <algorithm>
#include <iterator>
#include <time.h>
using namespace std;
int main( int argc, char ** argv )
{
srand(time(NULL));
int v_size=524000;
std::pair<double, int> AB_large[v_size];
for( int i = 0; i<v_size; ++i)
{
AB_large[i].first = static_cast <double> (rand()) / static_cast <double> (RAND_MAX);
AB_large[i].second = i;
}
std::sort(AB_large, AB_large+v_size);
return 0;
}
看起来像是堆栈溢出。
尽量不要对这么大的对象使用自动变量:
std::vector< std::pair<double, int> >AB_large(v_size);
// ...
std::sort(AB_large.begin(), AB_large.end());
你的数组是一个局部变量,所以它是在堆栈上创建的。通常对堆栈大小有限制。在Linux上,通常可以通过ulimit
命令查看和修改它。(在Windows上,c++可执行文件的堆栈限制是在编译时确定的,它可以通过编译器选项或pragmas来改变。)
你的pair的一个实例的大小是8+4=12字节。默认的堆栈限制通常是8兆字节。由于编译器的对齐设置,可能将12个字节填充为16个字节。所以,219 * 16 = 223字节,也就是相同的8 mebibytes。
相关文章:
- 显示错误输出的简单数组排序程序
- C 使用单个函数对具有多种值类型的数组排序
- 2D数组排序,空格打乱顺序
- C 2D数组排序
- C++数组排序 - 将"bbba"和"0001"视为不正确排序的问题
- 数组排序功能
- CString 数组排序
- 简单的数组排序/检查 划分和征服版本
- C++ 中的多维数组排序
- 选择在++中对并行数组排序
- C++:二维指针数组排序:选择排序不适用于某些实例
- C++字符串数组排序
- C++中的指针数组排序算法
- 在VC++6中使用向量进行数组排序时出错,而在VC++2012中没有错误
- 将索引数组排序为主数组
- 数组排序、数组输入、数组输出
- C++数组排序,内存错误
- 在嵌入式系统上将数组排序功能从c++移植到c
- 基于其他int数组排序
- 多维数组排序c++奇怪行为