如何在犰狳中分享共同的记忆?

时间:2016-01-20 09:36:05

标签: c++ armadillo

在armadillo中,高级构造函数提供了共享内存的方式,如

mat B(10,10);

mat A(B.memptr(),2,50,false, true);

但是在关于类的c ++程序中,首先应该在头文件中声明变量,比如

mat A,B;

并在cpp文件中实现其他功能。

那么,任何人都可以告诉我如何在cpp文件中的mat A和mat B之间共享内存,并在头文件中声明mat A和B?

2 个答案:

答案 0 :(得分:1)

您可以在声明课程时将B矩阵声明为A矩阵的参考。例如:

class foo
   {
   public:

   mat  A;
   mat& B;  // alias of A

   foo()
     : B(A)  // need to initialize the reference as part of the constructor
     {
     A.zeros(4,5);
     A(1,1) = 1;
     B(2,2) = 2;

     A.print("A:");
     B.print("B:");
     }
   };

另一个(更脆弱的)解决方案是使用公共矩阵,然后使用C ++ 11 std::move()将内存分配给其他矩阵。例如:

#include <utility>
#include <armadillo>

using namespace std;
using namespace arma;

int main()
  {
  mat C(4,5, fill::zeros);  // C is the common matrix

  mat A:
  mat B;      

  A = std::move( mat(C.memptr(), C.n_rows, C.n_cols, false, false) );
  B = std::move( mat(C.memptr(), C.n_rows, C.n_cols, false, false) );

  // note: in the above, the last argument of 'false' is important

  A(1,1) = 1;
  B(2,2) = 2;

  // A and B will both have 1 and 2 as they're using the same memory      

  A.print("A:");
  B.print("B:");
  }

如果您正在使用gcc或clang,则可以使用-std=c++11开关启用C ++ 11模式。

答案 1 :(得分:0)

vs 2013

#define ARMA_USE_CXX11

应该包括

。然后 std :: move 就可以了。

感谢 hbrerkere 指导正确的方式。