
c++
文章平均质量分 56
c++
eric1984
喜欢技术的架构师
展开
-
jvm 源代码笔记 四 jvm主要功能模块
种计数的处理) 管理内存、线程、垃圾回收等,内部初始化了 线程服务、运行时服务、类加载服务2、bytecodes_init 建立好字节码相关的表结构,便于后面利用查表实现相应的逻辑3、classLoader_init 统计class,维护classpath、class与字节码等之间的映射关系4、codeCache_init(); 缓冲代码5、VM_Version_init(); 设置 主、次版本号、 设置build数等6、stubRoutines_init1(); 便于c中调用jav原创 2012-04-05 16:44:23 · 135 阅读 · 0 评论 -
jvm 源代码笔记 三 create_vm 主流程
vaVMInitArgs* args, bool* canTryAgain)1、hotspot/src/os/windows/vm/os_windows.cpp line:3498 os::init() win32::initialize_system_info(); 从系统中返回相关信息 主要数据结构 SYSTEM_INFO win32::setmode_streams(); 改变标准文件的打开方式,如stdin、stdout 从文本模式转到二进制模式 in原创 2012-04-05 16:43:22 · 134 阅读 · 0 评论 -
jvm源代码笔记 二
代码的位置终于找到了。openjdk\hotspot\src\share\tools\launcher\java.c 中的main函数是整个hotspot虚拟机的入口,和其他程序一样,main函数是在非常高的抽象程度进行抽象并进而描述主流程,进行必要的初始化之后,JavaMain在新的线程中开启并开始执行java的main class。从jvm本身启动的角度来看,最主要的流程是通过一个回调来进行的,此回调函数通过 InvocationFunctions 数据结构进行传递。主要的函数原创 2012-04-05 16:41:38 · 92 阅读 · 0 评论 -
高级语言虚拟机最简单的jit实现
switch(handle.opcode) { case Binary_Add: move r0 arg1; move r1 arg2; call binary_add(); // 多一次跳转(相对于直接调用binary_add),cpu的cache用不上 break; case Binary_sub: move r2 arg1; move r3 arg2; call b原创 2012-03-08 16:50:13 · 91 阅读 · 0 评论 -
发散式的函数调用组织形式------从apache的挂钩机制中得到的启示
这种结构打破了传统的函数调用的执行流程,任一个步骤都可以进行扩展,而且每个模块还可以保持自己内部的层次化和模块化。c来模拟C++多态的实现?程序最终都是以机器码运行的,汇编是机器码的符号映射,所以汇编语言的描述能力和高级语言是一样的,所以C语言的描述能力和C++是一样的,即用C++能解决的问题用C肯定可以实现,当然其实现的难度是不一样的。这样的话,C++里面的虚函数如何用C来模拟呢?虚函数实现了C++的多态性,即实现了动态绑定,其实C也可以实现。基本的思路是:原本C程序中是函数调用函数(本质是汇编的原创 2011-11-02 14:34:14 · 69 阅读 · 0 评论 -
JDK7 源代码笔记 一
序的速度是相当的,毕竟这方面做的比较早的比较有成果的还是jvm,网上搜了一下,系统分析JVM代码的资料是少的可怜,干脆,我就花点功夫去做个开拓者吧。以下所有分析基于最新jvm 的实现 jdk7的源代码,下载地址如下 http://download.java.net/openjdk/jdk7/ 我所使用的源代码的版本是 openjdk-7 build143 。 一、hotspot 入口 openjdk-7-ea-src-b142-12_may_2011\openjdk\hotspot\src\sha原创 2012-04-05 16:39:32 · 102 阅读 · 0 评论 -
注册回调机制
某网游服务端的注册回调机制基本概念GS:game server 主要是处理游戏逻辑和维护数据,其基本功能是响应客户端的命令。所以GS的核心模块是无限循环取消息、处理消息的过程。网游处理的核心对象是角色,而每个角色的处理逻辑是类似的,所以服务端可以编写通用的流程,分别处理不同状态、环境和属性下的角色逻辑。服务端代码核心的编程思想是注册、回调。顾名思义,这种机制包括2个过程。注册:原创 2011-11-02 22:09:07 · 1352 阅读 · 0 评论 -
成员函数指针实现的回调
nSelector)(this); 即初始化的时候,设置的是监听者(负责处理回调的指针), 回调内的参数是被点击的对象指针,一般情况下 这2个是一致的。 例子:cocos2d-x中的实现1、CCObject.htypedef void (CCObject::*SEL_MenuHandler)(CCObject*); // 定义回调类型#define menu_selector(_SELECTOR) (SEL_MenuHandler)(&原创 2013-06-24 10:48:02 · 108 阅读 · 0 评论 -
facebook hiphop php vm 实现概述(二)
(符号表)1、assoc_list.cpp 变量关联表2、code_coverage.cpp 代码覆盖率工具3、file_repository.cpp php文件的jit缓存4、variable_environment.cpp 维护各个函数、变量等所属的环境(如所属的类、作用范围等)5、variant_stack.cpp 变量栈结构(可以用于记录函数调用关系)6、eval_state.cpp 最重要的runtime信息都收集在这里面,比如当前原创 2011-12-21 09:17:48 · 69 阅读 · 0 评论 -
facebook hiphop php vm 实现概述
语句 parser:生成出来ast analysis:静态语义分析(变量类型、作用域、常量表、变量表、函数表……)ffi:多语言交互层(大概是实现胶水的接口)hphp:入口idl:接口定义system:php这一层的系统环境third_party:借用的第三方包util:工具类runtime:整个转换器的运行时系统 tmp:生成的文件 ext:包装给php使用的外部函数,即php中使用的一些基础功能需要有对应的c++实现(因为此runtim原创 2011-12-15 13:12:29 · 72 阅读 · 0 评论 -
TBB(Intel Threading Building Blocks)学习笔记
认为基本上可以分为这么几个层面:1、指令级的并行;即所谓的微程序、指令流水线等,现在cpu的一级缓存、二级缓存都很大,所以这个cache的效果还是比较好的(基于局部性原理)2、线程级的并行;即同一个时刻多个函数在运行(现在的cpu好像都是多核的)3、服务级别的(比如一个游戏服务器中有商店服务、也有战斗服务、聊天服务等 这里的每个服务可能对应多个逻辑线程)4、节点级别的;即所谓的分布式系统,多个节点互相配合,使整个系统在逻辑上成为一个单一的系统。(google、qq等这些海量访问的服务统统是分布式的)一般来说原创 2011-12-09 17:49:22 · 106 阅读 · 0 评论