什么是时间内存分配

What is temporal memory allocation?

本文关键字:分配 内存 时间 什么      更新时间:2023-10-16

我正在研究表达模板和mshadow codebase。在这里的Wiki页面中,他们提供了一个示例,该示例是不良解决方案,因为它进行了时间内存分配和交易。那是什么,给定代码做这样的事情是什么?

推荐代码:

// Naive solution for vector operation overloading 
struct Vec {
  int len;
  float* dptr;
  Vec(int len) : len(len) { 
    dptr = new float[len];
  }
  Vec(const Vec& src) : len(src.len) {
    dptr = new float[len];
    memcpy(dptr, src.dptr, sizeof(float)*len ); 
  }
  ~Vec(void) {
    delete [] dptr;
  }
};
inline Vec operator+(const Vec &lhs, const Vec &rhs) {
  Vec res(lhs.len);
  for (int i = 0; i < lhs.len; ++i) {
    res.dptr[i] = lhs.dptr[i] + rhs.dptr[i];
  } 
  return res;
} 

在这种情况下,他们正在谈论在内存中分配一些空间以暂时保持值。

例如,当您做

a = a + b;

编译器将执行以下

  1. 分配一个新的内存块
  2. 计算ab的总和,并将结果写入该块
  3. 将临时存储的结果复制到a

您可以看到,没有理由执行#1或#3,因为总和实际上可以直接进入a

现在您可能会问:为什么编译器不能理解a=a+ba+=b是同一件事。答案是因为尽管对于intdoublesize_t这始终是正确的,但可以实现这两个操作员做一些不同的类别。看看std::ofstream如何使用左BITSHIFT操作员来完全不同的东西。