Chinaunix首页 | 论坛 | 博客
  • 博客访问: 315659
  • 博文数量: 174
  • 博客积分: 3061
  • 博客等级: 中校
  • 技术积分: 1740
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-04 22:43
文章分类

全部博文(174)

文章存档

2011年(54)

2010年(14)

2009年(30)

2008年(26)

2007年(27)

2006年(23)

我的朋友

分类: WINDOWS

2011-07-15 11:42:14

 CollectorCell cell;
    void* storage = &cell;

    COMPILE_ASSERT(sizeof(JSArray) <= sizeof(CollectorCell), sizeof_JSArray_must_be_less_than_CollectorCell);
    JSCell* jsArray = new (storage) JSArray(JSArray::createStructure(jsNull()));
    JSGlobalData::jsArrayVPtr = jsArray->vptr();
    jsArray->~JSCell();

。。。。
void* vptr() { return *reinterpret_cast(this); }



在看javascriptcore的时候读到了这样一段代码。

先抛开jsc的含义,本身其获取vptr的方式可以分析一下。


1. 这个代码先预先分配了一块内存 storage
2. 然后用operator new 将jsarray 指向这个storage
3. 拿到jsarray的vptr
4. 通过在vs2008的观察(因为c++对象模型这本书在说明具体对象的内存布局的时候,讲到这个布局实际上是和cpp 编译器相关的), vptr 实际上就是位于this指针的开始处。



阅读(526) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~