这个问题涉及到我正在开发的一个程序。
我正在开发一个需要在网络上传输的行集或单行大于2GB的项目(网络无法发送大于2GB的数据组)。我已经对代码进行了适当的更改,以便不会发送这些组/行,但现在我正在尝试构建测试用例。
我已经构建了一个测试,创建了少于10亿行,占用超过2GB。程序在将这些行组发送到网络之前正确地过滤掉它们。
我的问题是,我需要创建一个单行,其中包含一个包含单个字符串或多列包含字符串的集合的列,该行的大小大于2GB。但是,当字符串开始接近2GB时,malloc返回NULL。
我进行了一些研究,并发现这可能是因为我没有足够的连续内存,因此我开始添加更多列和较小的字符串。我甚至分成64列,以便不必立即分配那么多空间。然而,我仍然遇到同样的问题,我怀疑自己可能忽略了什么。
这是64位Windows 7系统上的64个进程,拥有8GB的RAM。(但我还在一台64位红帽机器上测试了它,有24GB的RAM)
有人知道为什么系统在接近2GB时无法分配程序内存吗?
附言:我也研究了64位系统上每个进程可以分配的内存,超过100TB。鉴于如此之多,我无法在接近2GB时进行分配真正让我困惑。
我正在开发一个需要在网络上传输的行集或单行大于2GB的项目(网络无法发送大于2GB的数据组)。我已经对代码进行了适当的更改,以便不会发送这些组/行,但现在我正在尝试构建测试用例。
我已经构建了一个测试,创建了少于10亿行,占用超过2GB。程序在将这些行组发送到网络之前正确地过滤掉它们。
我的问题是,我需要创建一个单行,其中包含一个包含单个字符串或多列包含字符串的集合的列,该行的大小大于2GB。但是,当字符串开始接近2GB时,malloc返回NULL。
我进行了一些研究,并发现这可能是因为我没有足够的连续内存,因此我开始添加更多列和较小的字符串。我甚至分成64列,以便不必立即分配那么多空间。然而,我仍然遇到同样的问题,我怀疑自己可能忽略了什么。
这是64位Windows 7系统上的64个进程,拥有8GB的RAM。(但我还在一台64位红帽机器上测试了它,有24GB的RAM)
有人知道为什么系统在接近2GB时无法分配程序内存吗?
附言:我也研究了64位系统上每个进程可以分配的内存,超过100TB。鉴于如此之多,我无法在接近2GB时进行分配真正让我困惑。
gcAllowVeryLargeObjects
是针对.NET框架的。这是一个C++应用程序,对吧?我有相同的配置,并且使用10GB运行良好(尽管分配需要一些时间)。 - Jesse Good