Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;标准::错误的分配,约200000x6双记录_C++_Matlab_Heap_Heap Memory_Records - Fatal编程技术网

C++ c++;标准::错误的分配,约200000x6双记录

C++ c++;标准::错误的分配,约200000x6双记录,c++,matlab,heap,heap-memory,records,C++,Matlab,Heap,Heap Memory,Records,我有一个MATLAB代码,它在20000000×6个双记录上运行良好 我将相同的代码转换为cC++并使用vector来存储这些记录,但它给了我一个问题 这是我的结构: typedef struct Affine { double a11; double a12; double a13; double a21; double a22; double a23; }; 我有一个向量存储对configs的初始猜测,名为configs,它保存20000000个×Affine记录

我有一个MATLAB代码,它在20000000×6个双记录上运行良好

我将相同的代码转换为cC++并使用vector来存储这些记录,但它给了我一个问题

这是我的结构:

typedef struct Affine 
{
  double a11;
  double a12;
  double a13;
  double a21;
  double a22;
  double a23;
};
我有一个向量存储对configs的初始猜测,名为configs,它保存20000000个×
Affine
记录

我必须把这些记录变成仿射的,我像这样创建的

Affine affines;

 affines.a11 = 0;
 affines.a12 = 0;
 affines.a13 = 0;
 affines.a21 = 0;
 affines.a22 = 0;
 affines.a23 = 0;

 vector<Affine> matrixConfigs_mex(configs.size(), affines);

什么操作系统?什么编译器?什么命令行?@Mudasar请发布一个复制问题的命令行。链接显示向量中的20000000
Affine
对象没有问题。那么您创建了两个向量?那是2GB的,而且是。我猜是操作系统限制了你的程序分配这么多内存。例如,它没有两个连续的1GB内存块,或者你超过了提供给进程的空间(2GB)。每个向量是960MB,一个32位进程有2GB的虚拟地址空间;它们不适合(特别是因为
std::vector
需要连续内存,并且虚拟地址空间包含向量之外的其他内容)。事实上,您有10GB的RAM是完全不相关的,这里限制您的是虚拟地址空间的大小,它是固定的。克服此问题并利用RAM的最简单方法是以64位模式编译程序。
// Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x86

#include <vector>
#include <iostream>

struct Affine 
{
  double a11;
  double a12;
  double a13;
  double a21;
  double a22;
  double a23;
};

int main()
{        
    Affine affine;

    affine.a11 = 0.1;
    affine.a12 = 0.1;
    affine.a13 = 0.1;
    affine.a21 = 0.1;
    affine.a22 = 0.1;
    affine.a23 = 0.1;

    std::vector<Affine> test1(20000000, affine);
    std::vector<Affine> test(test1.size(), affine);

    std::cout << test[10000].a11;
}