相关疑难解决方法(0)

用C++编写二进制文件的速度非常快

我正在尝试将大量数据写入我的SSD(固态硬盘).大量的我的意思是80GB.

我浏览网页寻求解决方案,但我想出的最好的是:

#include <fstream>
const unsigned long long size = 64ULL*1024ULL*1024ULL;
unsigned long long a[size];
int main()
{
    std::fstream myfile;
    myfile = std::fstream("file.binary", std::ios::out | std::ios::binary);
    //Here would be some error handling
    for(int i = 0; i < 32; ++i){
        //Some calculations to fill a[]
        myfile.write((char*)&a,size*sizeof(unsigned long long));
    }
    myfile.close();
}
Run Code Online (Sandbox Code Playgroud)

使用Visual Studio 2010进行编译并完全优化并在Windows7下运行,此程序最大可达20MB/s.让我感到困扰的是,Windows可以将文件从其他SSD复制到此SSD,速度介于150MB/s和200MB/s之间.所以至少快7倍.这就是为什么我认为我应该能够更快.

我有什么想法可以加快我的写作速度?

c++ io optimization performance file-io

221
推荐指数
8
解决办法
17万
查看次数

mmap()与阅读块

我正在开发一个程序,该程序将处理可能大小为100GB或更大的文件.这些文件包含一组可变长度记录.我已经启动并运行了第一个实现,现在我正在寻求提高性能,特别是在输入文件被多次扫描时更有效地进行I/O.

mmap()通过C++的fstream库使用和读取块有经验吗?我想做的是从磁盘读取大块到缓冲区,从缓冲区处理完整记录,然后阅读更多.

mmap()代码可能会变得非常凌乱,因为mmap"d块需要躺在页大小的边界(我的理解)和记录可能潜在般划过页面边界.使用fstreams,我可以寻找记录的开头并再次开始阅读,因为我们不仅限于阅读位于页面大小边界的块.

如何在不实际编写完整实现的情况下决定这两个选项?任何经验法则(例如,mmap()快2倍)或简单测试?

c++ file-io fstream mmap

172
推荐指数
6
解决办法
7万
查看次数

为什么mmap()比顺序IO更快?

可能重复:
mmap()与读取块

我听说(在互联网上读取它)mmap()比顺序IO更快.它是否正确?如果是,那为什么它更快?

  • mmap() 不按顺序阅读.
  • mmap()具有从盘面本身一样去取read()
  • 映射区域不是顺序的 - 所以没有DMA(?).

那么mmap()实际上应该比read()文件慢吗?我上面的哪些假设是错误的?

c linux mmap dma

39
推荐指数
3
解决办法
2万
查看次数

如何从文件流中加速15M整数的加载?

我有一个预先计算的整数数组,它的固定大小为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++ stl stream

13
推荐指数
4
解决办法
1931
查看次数

C - 共享内存 - 共享结构中的动态数组

我正在尝试共享像这个
例子的结构:

typedef struct {
    int* a;
    int b;
    int c;
} ex;
Run Code Online (Sandbox Code Playgroud)

在进程之间,问题是当我使用malloc初始化'a'时,它变为私有的进程堆执行此操作(或者至少我认为这是发生的事情).有没有办法用这个有效的结构创建共享内存(使用shmget,shmat)?

编辑:我在Linux上工作.
编辑:我有一个初始化缓冲区的进程,如下所示:

key_t key = ftok("gr", 'p');   
int mid = shmget(key, sizeof(ex), IPC_CREAT | 0666);    
ex* e = NULL;
status b_status = init(&e, 8); //init gives initial values to b c and allocate space for 'a' with a malloc
e = (ex*)shmat(mid, NULL, 0);
Run Code Online (Sandbox Code Playgroud)

另一个进程将自己附加到共享内存,如下所示:

key_t key = ftok("gr", 'p');
int shmid = shmget(key, sizeof(ex), 0);
ex* e;
e = (ex*)shmat(shmid, NULL, 0);  
Run Code Online (Sandbox Code Playgroud)

然后从a获取一个元素,在这种情况下,在位置1

int i …
Run Code Online (Sandbox Code Playgroud)

c memory malloc shared dynamic

13
推荐指数
2
解决办法
1万
查看次数

我如何为node.js设计和实现非阻塞内存映射模块

node.js存在mmap模块:https://github.com/bnoordhuis/node-mmap/

正如作者Ben Noordhuis指出的那样,访问映射内存可能会阻塞,这就是为什么他不再推荐它并停止使用它.

所以我想知道如何为node.js设计一个非阻塞内存映射模块?线程,纤维,?

显然,如果node.js中的线程只发生在其他地方而不是请求处理程序,那么这附近会引发一个问题.

mmap memory-mapped-files memory-mapping node.js

7
推荐指数
1
解决办法
4156
查看次数

mmap 文件支持的映射与 Linux 中的匿名映射

  • 文件支持的映射和匿名映射之间的主要区别是什么。

  • 当我们需要进程之间的 IPC 时,我们如何在文件支持映射或匿名映射之间进行选择。
  • 使用这些的优点和缺点是什么?

linux ipc mmap process

5
推荐指数
1
解决办法
4111
查看次数

我们在 mmap 中将文件描述符设置为 -1 的场景是什么?

为什么 mmap 比读写更好

还有一个类似的帖子

我的问题如下:在某些情况下,人们使用 mmap 而不是从文件中读取。一种这样的代码是:

 *mapping = mmap(NULL, *mapping_size, PROT_READ | PROT_WRITE,
      MAP_POPULATE | MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
Run Code Online (Sandbox Code Playgroud)

上面的代码试图分配大量的内存。我想知道在这种情况下 mmap 是做什么的,它是如何工作的。每个人都在谈论 mmap wrt 文件的优势。但是这些 fd 设置为 -1 的代码很常见。这是什么意思,这样做有什么好处。?我希望有人能消除我的疑问,由于含糊不清,我无法完全提出疑问。

谢谢

c linux mmap linux-kernel

4
推荐指数
2
解决办法
4908
查看次数

按顺序读取大文件

如何处理(以只读方式)在一个大的二进制文件C/C++Linux尽可能快?通过readmmap?什么缓冲区大小?(没有提升或任何东西.)

c c++ linux io

3
推荐指数
1
解决办法
727
查看次数

mmap真的会将数据复制到内存中吗?

据说mmap()将文件映射到内存,并且它花费在调用进程的虚拟地址空间内存中.它是否真的将数据复制到内存中,或者数据是否仍存在于磁盘中?是mmap()不是更快read()

c linux

3
推荐指数
2
解决办法
9718
查看次数