我有一个预先计算的整数数组,它的固定大小为15M.我需要在程序启动时加载这些值.目前加载最多需要2分钟,文件大小约为130MB.是加速加载的方法吗?我也可以自由更改保存过程.
std::array<int, 15000000> keys;
std::string config = "config.dat";
// how array is saved
std::ofstream out(config.c_str());
std::copy(keys.cbegin(), keys.cend(),
std::ostream_iterator<int>(out, "\n"));
// load of array
std::ifstream in(config.c_str());
std::copy(std::istream_iterator<int>(in),
std::istream_iterator<int>(), keys.begin());
in_ranks.close();
Run Code Online (Sandbox Code Playgroud)
提前致谢.
解决了.使用接受答案中提出的方法.现在它只需要一眨眼.
全心全意感谢您的见解.
作为一名C++程序员,我有时需要使用C语言处理内存缓冲区.例如:
char buffer[512];
sprintf(buffer, "Hello %s!", userName.c_str());
Run Code Online (Sandbox Code Playgroud)
或者在Windows中:
TCHAR buffer[MAX_PATH+1]; // edit: +1 added
::GetCurrentDirectory(sizeof(buffer)/sizeof(TCHAR), &buffer[0]);
Run Code Online (Sandbox Code Playgroud)
上面的示例是我通常如何创建本地缓冲区(本地堆栈分配的char数组).但是,有许多可能的变化,因此我对您对以下问题的答案非常感兴趣:
&buffer[0]比传递更好的编程风格buffer?(我更喜欢&buffer[0].)static char buffer[N];)更快吗?是否还有其他论据支持或反对?const char *.这(通常)是好还是坏?(我确实意识到调用者需要自己创建副本以避免下一次调用会改变之前的返回值.)static char * buffer = new char[N];,永远不要删除缓冲区并在每次调用时重复使用它.sprintf_s,memcpy_s......变种?(Visual Studio一直试图让我相信这一点很长时间,但我想要第二个意见:p)我的Win32 C++应用程序充当RPC服务器 - 它有一组用于处理请求的函数,RPC运行时创建一个单独的线程并调用该线程中的一个函数.
在我的函数中,我有一个std :: auto_ptr,它用于控制在编译时已知的堆分配的char []数组.它在使用VC++编译时非常有效,但根据C++标准,它是未定义的行为,我想摆脱它.
我有两个选项:std :: vector或堆栈分配的数组.由于我不知道为什么有堆分配的数组,我想考虑用堆栈分配的数组替换它.该数组是10k元素,如果RPC运行时生成一个堆栈非常小的线程,我可以假设它面临堆栈溢出.
我想检测一下典型地为线程分配了多少堆栈空间,以及我的函数有多少可用(它的被调用者肯定会消耗一些分配的空间).我怎么能这样做?