C++ 将内容(对象)复制到JVM中的新堆

C++ 将内容(对象)复制到JVM中的新堆,c++,memcpy,C++,Memcpy,我正在尝试将旧堆中的所有对象复制到新堆,如下所示 HeapWord* mark = _space->bottom(); HeapWord* nmark = _nspace->bottom(); HeapWord* cond = _space->top(); while(mark < cond){ oop old_obj = oop(mark); if(oop(mark)->getUsed() =

我正在尝试将旧堆中的所有对象复制到新堆,如下所示

HeapWord* mark = _space->bottom();
    HeapWord* nmark = _nspace->bottom();
    HeapWord* cond = _space->top();
    while(mark < cond){
            oop old_obj = oop(mark);
            if(oop(mark)->getUsed() == 1){
                memcpy(nmark,mark,oop(mark)->size());
                oop new_obj = oop(nmark);
                nmark += new_obj->size();
                _nspace->set_top(nmark);
            }
        mark += oop(mark)->size();
    }
typedef class oopDesc* oop;


class oopDesc {
  int used;
  volatile markOop _mark;
  union _metadata {
    Klass*      _klass;
    narrowKlass _compressed_klass;
  } _metadata;
....
//Rest of the functions
....
}

复制后,旧的_obj和新的_obj的内容如下

HeapWord* mark = _space->bottom();
    HeapWord* nmark = _nspace->bottom();
    HeapWord* cond = _space->top();
    while(mark < cond){
            oop old_obj = oop(mark);
            if(oop(mark)->getUsed() == 1){
                memcpy(nmark,mark,oop(mark)->size());
                oop new_obj = oop(nmark);
                nmark += new_obj->size();
                _nspace->set_top(nmark);
            }
        mark += oop(mark)->size();
    }
typedef class oopDesc* oop;


class oopDesc {
  int used;
  volatile markOop _mark;
  union _metadata {
    Klass*      _klass;
    narrowKlass _compressed_klass;
  } _metadata;
....
//Rest of the functions
....
}


如何复制结构的全部内容,包括联合体的内容?

请完成
oopDesc
代码,它现在有不匹配的大括号。我很清楚你的意思,但还是让人困惑。此外,这个代码从标准C++的角度看非常粗略(<代码>易失性/代码>,<代码>联合< /COD>,<代码> MeMCPY < /代码>等)。您的问题最可能的原因是没有遵循三/五/零的规则。。。。并对两者使用相同的名称(
oop
oopDesc
??);实际上,你应该提供一个。更新了问题。请检查。哦,请不要键入定义指针。这只是信息隐藏,没有任何进一步的好处……实际上是java源代码(OpenJDK)。我想修改一些东西。