如何使用64-Linux上的C 中的新操作员动态分配大型内存,例如10 g
How to dynamically allocate big memory , like 10 G ,using new operator in c++ on 64-linux?
我需要动态分配一个较大的浮点数组,以使用C 新操作员(例如10G)为特殊应用程序分配一个。在64-ubuntu-14.04 Linux OS上运行的代码,具有64G内存。当我将内存的请求设置为大约7G时,1879048192x4/(1024x1024x1024)=7G
(float具有4个字节),例如:
float * data;
data = new float[1879048192];
该程序运行良好,但是当我尝试将请求增加到10G时,我得到了what(): std::bad_alloc
。我还尝试使用malloc()
进行新操作员:
data =(float*)malloc(1879048192*sizeof(float));
,但获得相同的结果。我的ulimit -a
是:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 514689
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 514689
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
有人可能会说,分配可能没有10G的持续记忆,但是我关闭了所有其他进展,总记忆为64克。我想知道我是否可以获得更大的数组,以及如何获得。Linux是否限制了此动态分配的最大数字?在哪里以及如何?
我尝试时不会看到问题。new
和malloc
都起作用。我的系统运行Ubuntu 15.04,并具有16克RAM。
但是,如果我尝试使用内存,我发现我需要非常谨慎地谨慎地将用于索引到数据数组的VAR类型。
例如,以下程序只能使用long int
和float
进行不良的事情,因为long int
的最大值为2^31
,而10GI的数组长度将比2^31
更长。另外,浮子一次仅将1.0
添加到16777216.0
。使用双打,可以在此处使用长int索引,因为数组较短。
use10g.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv){
long long int ten = 10;
long long int megi = 1024*1024;
long long int gigi = 1024*megi;
long long int asize = (ten*gigi)/((long int) sizeof(double));
double * data = new double[asize];
long long int i=2;
printf("A double is %zd bytesn", (size_t) sizeof(double));
printf("Array size is %lli n", asize);
data[0]=0.0;
data[1]=1.0;
while (i<asize) {
data[i]=data[i-1]+1.0;
++i;
}
printf("%lfn", (double) data[asize-1]);
printf("successn");
exit(EXIT_SUCCESS);
}
A double is 8 bytes
Array size is 1342177280
1342177279.000000
success
相关文章:
- LMDB:在有限的内存系统中打开大型数据库
- C++编译大型结构时内存使用过多
- 在 C++ 中,用于将大型 2D 数组转换为 1D 数组的内存分配
- 占用过多内存的大型 (10Mb) 文本的后缀树
- 在虚拟内存中分配大型类C
- C++内存中的大型对象集合是否正常
- 对象大型数组的内存使用量极大
- 在分配大型阵列期间内存增长
- 如何使用64-Linux上的C 中的新操作员动态分配大型内存,例如10 g
- 针对大型嵌套向量的高效内存分配
- 如何为大型项目制作一个简单的工具来检测Linux中的双倍空闲或内存溢出
- C++:使用指针存储/访问大型对象以避免内存不足
- 将大型Malloc阵列数据成功分配到内存后丢失
- 仅从大型数据文件中读取/写入所需的数据,以最大程度地减少内存占用
- 编译时间和内存 大型C++项目的使用情况?
- 做内存映射文件为大型缓冲区提供了优势
- 处理大型 C 数组时的内存问题
- 大型动态阵列的怪异内存泄漏
- 动态地为大型节点树分配内存
- 在C++中,将大型二进制(1GB-4GB)文件加载到内存中的最快方法是什么