学习jvm过程中学习一些c++知识的笔记
前向申明(解决循环引用等问题)
zhuanlan.zhihu.com/p/428923853 可参考
class ClassLoaderDataGraph;
class JNIMethodBlock;
class ModuleEntry;
class PackageEntry;
class ModuleEntryTable;
class PackageEntryTable;
class DictionaryEntry;
class Dictionary;
// ClassLoaderData class
class ClassLoaderData : public CHeapObj<mtClass> {
friend class VMStructs;
c++类中的匿名union
class A {
private:
union {
int a;
long long b;
};
public:
const void print() {
printf("a.a = %i\n", this -> a);
}
void setInt(int i) {
this->a = i;
}
};
形如上面的匿名的union会被转化为类似如下形式,注意是形似,核心区别是2个值共用一块内存 普通下面类的声明a,b不会共用一块内存
class A {
private:
// 用union包裹的a,b共用一块内存
// 如果普通类声明这2个变量,将占用2块内存
int a;
long long b;
public:
const void print() {
printf("a.a = %i\n", this -> a);
}
void setInt(int i) {
this->a = i;
}
};
c++中在位模式下进行类型转化 en.cppreference.com/w/cpp/langu…
` reinterpret_cast < ` new-type ` > ( ` expression ` ) `
ldd 是一个linux的 shell 脚本,并不是一个可执行程序(C++编译后的可执行程序);用来打印共享库的依赖关系
dlopen, dlsym, dlerror, dlclose 用户打开动态链接库
-
rsp寄存器, 始终指向函数调用栈栈顶
-
rbp寄存器, 一般用来指向函数栈帧的开始位置