今天在看hotspot代碼時,有處沒能看明白,因而請教青老師,給出瞭解答是指針轉換
的語法ios
share/vm/memory/defNewGeneration.cpp DefNewGeneration::collect share/vm/memory/genOopClosures.inline.hpp FastScanClosure::do_oop_work share/vm/memory/defNewGeneration.cpp DefNewGeneration::copy_to_survivor_space share/vm/oops/oop.inline.hpp forward_to::forward_to markOop.hpp src/share/vm/oops/markOop.hpp // Prepare address of oop for placement into mark inline static markOop encode_pointer_as_mark(void* p) { return markOop(p)->set_marked(); }
就是上面markOop(p) 這個寫法當時沒看懂,他不是什麼方法調用,也不是什麼構造函數,而是指針轉換。
青老師給我寫了一小段demo以下:函數
#include<iostream> using namespace std; struct A { int a; int b; }; typedef A* APtr; int main(){ A a; a.a=10; a.b=20; void *q = (void*)&a; APtr p = APtr(q); // 指針轉換 cout<<p->a<<","<<p->b<<endl; }