ConstantPool::allocate记录

编程入门 行业动态 更新时间:2024-10-14 04:27:02

ConstantPool::<a href=https://www.elefans.com/category/jswz/34/1734107.html style=allocate记录"/>

ConstantPool::allocate记录

常量池的开辟方法

ConstantPool* cp_oop = ConstantPool::allocate(loader_data, cp_length, CHECK_(empty));

ConstantPool* ConstantPool::allocate(ClassLoaderData* loader_data, int length, TRAPS) {Array<u1>* tags = MetadataFactory::new_writeable_array<u1>(loader_data, length, 0, CHECK_NULL);int size = ConstantPool::size(length);return new (loader_data, size, false, MetaspaceObj::ConstantPoolType, THREAD) ConstantPool(tags);
}

此处的new为运算符重载查看父类new的重载方法

void* MetaspaceObj::operator new(size_t size, ClassLoaderData* loader_data,size_t word_size, bool read_only,MetaspaceObj::Type type, TRAPS) throw() {// Klass has it's own operator newreturn Metaspace::allocate(loader_data, word_size, read_only,type, CHECK_NULL);
}

刚开始看的时候,反复对了参数,看这个重载方法怎么多个size参数,查看资料才明白这个new的关键字的函数原型为operator new(size_t size);这个size为sizeof(类)计算出来类的大小,这里c++默认给你做了处理,至此对new运算符更新了认识,其他初学者也会犯这种低级的错误,原因在于没有仔细了解过new的运算符重载。

更多推荐

ConstantPool::allocate记录

本文发布于:2023-12-03 07:43:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1652802.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:ConstantPool   allocate

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!