C++;:将一个大的二进制文件(2GB到4GB)以char*格式保存到RAM? 我正在C++中使用一个强的文件传输程序,它将一个文件转换成二进制,保存一个字符中的字节,然后通过一个强> TCP 连接将该字符发送给另一台计算机。然后,另一台计算机在本地重新创建该文件。这个程序确实有效,但我遇到了一个大文件的大问题!我无法分配足够的数组索引来包含字节!例如,如果我想发送一个600MB的文件,我需要一个具有6亿索引的char*。这很有效。但一旦我再往上走,程序就无法分配内存,我就会出错

C++;:将一个大的二进制文件(2GB到4GB)以char*格式保存到RAM? 我正在C++中使用一个强的文件传输程序,它将一个文件转换成二进制,保存一个字符中的字节,然后通过一个强> TCP 连接将该字符发送给另一台计算机。然后,另一台计算机在本地重新创建该文件。这个程序确实有效,但我遇到了一个大文件的大问题!我无法分配足够的数组索引来包含字节!例如,如果我想发送一个600MB的文件,我需要一个具有6亿索引的char*。这很有效。但一旦我再往上走,程序就无法分配内存,我就会出错,c++,file-io,tcp,ftp,C++,File Io,Tcp,Ftp,我的一个朋友建议我将文件分割成块,然后逐块进行传输,但是这会带来很多其他挑战,需要我基本上重写整个程序 有没有办法绕过这个问题 我的一个朋友建议我将文件分割成块,然后逐块进行传输,但是这会带来很多其他挑战,需要我基本上重写整个程序 这就是为什么它被称为计算机科学的原因,也是为什么一旦你掌握了这些挑战,你就可以去城里赚大钱的原因 我的一个朋友建议我将文件分割成块,然后逐块进行传输,但是这会带来很多其他挑战,需要我基本上重写整个程序 这就是为什么它被称为计算机科学,也是为什么一旦你掌握了这些挑战,你

我的一个朋友建议我将文件分割成块,然后逐块进行传输,但是这会带来很多其他挑战,需要我基本上重写整个程序

有没有办法绕过这个问题

我的一个朋友建议我将文件分割成块,然后逐块进行传输,但是这会带来很多其他挑战,需要我基本上重写整个程序

这就是为什么它被称为计算机科学的原因,也是为什么一旦你掌握了这些挑战,你就可以去城里赚大钱的原因

我的一个朋友建议我将文件分割成块,然后逐块进行传输,但是这会带来很多其他挑战,需要我基本上重写整个程序


这就是为什么它被称为计算机科学,也是为什么一旦你掌握了这些挑战,你就可以去城里赚大钱。

我不知道转换成二进制意味着什么,但你不应该分配600MB+的内存,而是使用缓冲

例如,要从磁盘发送文件,请执行以下操作:

  • 打开文件
  • 读取缓冲区中的部分文件
  • 通过TCP连接发送缓冲区(重复,直到完成)
您还可以使用内存映射(或Windows中的TransmitFile()

如果您的数据需要转换:

  • 打开文件
  • 缓冲区中的读取部分
  • 转换缓冲区
  • 发送缓冲区(重复)

我不知道转换为二进制意味着什么,但您不应该分配600MB+的内存,而是使用缓冲

例如,要从磁盘发送文件,请执行以下操作:

  • 打开文件
  • 读取缓冲区中的部分文件
  • 通过TCP连接发送缓冲区(重复,直到完成)
您还可以使用内存映射(或Windows中的TransmitFile()

如果您的数据需要转换:

  • 打开文件
  • 缓冲区中的读取部分
  • 转换缓冲区
  • 发送缓冲区(重复)

好吧,尽管内存很便宜,但它仍然有限。“按块发送”是默认方法,在现有库(您重新发明的库)中就是这样做的。此外,您的问题不仅仅是内存量,而是最大的空闲块的大小(可能小得多,600MB是幸运的情况)。一个“索引”有多大?(不确定您在这里指的是什么)。您是否也在64位平台上编译/运行?你会有更多的可寻址内存。当然,如果不考虑源或目标内存大小,您需要重写它以将文件分块发送过来。这只是一个基本的设计选择。你真的需要一次将整个文件读入内存吗?你说的“转换成二进制”是什么意思?为什么不首先将其作为二进制未格式化数据读取?您所说的索引是什么意思?这是x64还是x86程序?尽管内存很便宜,但它仍然有限。“按块发送”是默认方法,在现有库(您重新发明)中就是这样做的。此外,您的问题不仅仅是内存量,而是最大的空闲块的大小(可能小得多,600MB是幸运的情况)。一个“索引”有多大?(不确定您在这里指的是什么)。您是否也在64位平台上编译/运行?你会有更多的可寻址内存。当然,如果不考虑源或目标内存大小,您需要重写它以将文件分块发送过来。这只是一个基本的设计选择。你真的需要一次将整个文件读入内存吗?你说的“转换成二进制”是什么意思?为什么不首先将其作为二进制未格式化数据读取?您所说的索引是什么意思?这是x64还是x86程序?这个问题根本没有更好的答案+这个问题根本没有更好的答案+1.