前言
- 这篇东西只是我对
对象模型
的不上的台面的猜想和思考 - 最近笔者阅读redis源代码,从redis简单实现的对象机制,忽然想到javascirpt的语言特性,javascirpt的对象是如何实现的呢?一查资料发觉水真深,javascirpt经过多年优化,v8使用了许多c++的奇技淫巧。我脑洞中提出一个疑问,javascirpt的链式作用域,如何查找,是不是javascirpt编译器也实现了类似键值对数据库的一些策略,比如键空间、字典空间什么的。。。作为一枚刚巩固c语言基础入门c++的新手,像验证这个猜想有些难度,或者说好高骛远了,姑且试试吧反正浪费点时间罢了
对象
- C语言与面向对象的语言的区别,讲一个比较易懂的例子吧,那就是程序中连
=
等于号都不一样了!
// 在c语言是这样子的
int a = 1;
// 将之编译后大概是这样的汇编指令,mov指令是往寄存器里移动数据
movq $1, -4(%rbp)
// C语言的编译器认知中,先给a变量一个地址(给它分配4个内存的寄存器,因为int占4个字节),然后往这个地址存放数据(movq就是向四个字节移动数据)
// 面向对象的语言,如
string str1 = "abc";
// 这里的等于号可不是C语言那样把"abc"的首地址赋值给`str1`,而是赋值给str1对象的一个代表值的成员,`st1`是一个对象,
// 在编译器的认知中,先给str1对象分配空间,类似结构体的内存布局,然后执行构建函数,`string str("abc")`....
未完待续