《深入理解Android虚拟机内存管理》示例程序编译阶段生成的各种语法树完整版
1.tokens
"int" "int"
<SPACES> " "
<IDENTIFIER> "global_a"
<SPACES> " "
"=" "="
<SPACES> " "
<INTEGER> "5"
";" ";"
<SPACES> "\r\n"
"long" "long"
<SPACES> " "
<IDENTIFIER> "global_b"
";" ";"
<SPACES> "\r\n"
"char" "char"
<SPACES> " "
"*" "*"
<SPACES> " "
<IDENTIFIER> "global_c"
<SPACES> " "
"=" "="
<SPACES> " "
"\"" "\"HelloWorld!\""
";" ";"
<SPACES> "\r\n"
"int" "int"
"[" "["
<INTEGER> "5"
"]" "]"
<SPACES> " "
<IDENTIFIER> "global_array"
";" ";"
<SPACES> "\r\n"
"struct" "struct"
<SPACES> " "
<IDENTIFIER> "point"
<SPACES> " "
<IDENTIFIER> "global_struct"
";" ";"
<SPACES> "\r\n"
"struct" "struct"
<SPACES> " "
<IDENTIFIER> "point"
"{" "{"
<SPACES> "\r\n "
"int" "int"
<SPACES> " "
<IDENTIFIER> "x"
";" ";"
<SPACES> "\r\n "
"int" "int"
<SPACES> " "
<IDENTIFIER> "y"
";" ";"
<SPACES> "\r\n"
"}" "}"
";" ";"
<SPACES> "\r\n"
"int" "int"
<SPACES> " "
<IDENTIFIER> "func"
"(" "("
"int" "int"
<SPACES> " "
<IDENTIFIER> "m"
"," ","
<SPACES> " "
"int" "int"
<SPACES> " "
<IDENTIFIER> "n"
")" ")"
"{" "{"
<SPACES> "\r\n "
"int" "int"
<SPACES> " "
<IDENTIFIER> "local_a"
<SPACES> " "
"=" "="
<SPACES> " "
<INTEGER> "4"
";" ";"
<SPACES> "\r\n "
<IDENTIFIER> "local_a"
<SPACES> " "
"=" "="
<SPACES> " "
<IDENTIFIER> "m"
";" ";"
<SPACES> "\r\n "
<IDENTIFIER> "local_a"
<SPACES> " "
"=" "="
<SPACES> " "
<IDENTIFIER> "n"
";" ";"
<SPACES> "\r\n "
"return" "return"
<SPACES> " "
<IDENTIFIER> "local_a"
";" ";"
<SPACES> "\r\n"
"}" "}"
<SPACES> "\r\n"
"int" "int"
<SPACES> " "
<IDENTIFIER> "main"
"(" "("
"int" "int"
<SPACES> " "
<IDENTIFIER> "argc"
"," ","
<SPACES> " "
"char" "char"
"*" "*"
"*" "*"
<SPACES> " "
<IDENTIFIER> "argv"
")" ")"
"{" "{"
<SPACES> "\r\n "
<IDENTIFIER> "func"
"(" "("
<INTEGER> "2"
"," ","
<INTEGER> "3"
")" ")"
";" ";"
<SPACES> "\r\n "
"return" "return"
<SPACES> " "
<INTEGER> "0"
";" ";"
<SPACES> "\r\n"
"}" "}"
<SPACES> "\r\n"
<EOF> ""
2.抽象语法树
<<AST>> (helloworld.cb:1)
variables:
<<DefinedVariable>> (helloworld.cb:1)
name: "global_a"
isPrivate: false
typeNode: int
initializer:
<<IntegerLiteralNode>> (helloworld.cb:1)
typeNode: int
value: 5
<<DefinedVariable>> (helloworld.cb:2)
name: "global_b"
isPrivate: false
typeNode: long
initializer: null
<<DefinedVariable>> (helloworld.cb:3)
name: "global_c"
isPrivate: false
typeNode: char*
initializer:
<<StringLiteralNode>> (helloworld.cb:3)
value: "HelloWorld!"
<<DefinedVariable>> (helloworld.cb:4)
name: "global_array"
isPrivate: false
typeNode: int[5]
initializer: null
<<DefinedVariable>> (helloworld.cb:5)
name: "global_struct"
isPrivate: false
typeNode: struct point
initializer: null
functions:
<<DefinedFunction>> (helloworld.cb:10)
name: "func"
isPrivate: false
params:
parameters:
<<Parameter>> (helloworld.cb:10)
name: "m"
typeNode: int
<<Parameter>> (helloworld.cb:10)
name: "n"
typeNode: int
body:
<<BlockNode>> (helloworld.cb:10)
variables:
<<DefinedVariable>> (helloworld.cb:11)
name: "local_a"
isPrivate: false
typeNode: int
initializer:
<<IntegerLiteralNode>> (helloworld.cb:11)
typeNode: int
value: 4
stmts:
<<ExprStmtNode>> (helloworld.cb:12)
expr:
<<AssignNode>> (helloworld.cb:12)
lhs:
<<VariableNode>> (helloworld.cb:12)
name: "local_a"
rhs:
<<VariableNode>> (helloworld.cb:12)
name: "m"
<<ExprStmtNode>> (helloworld.cb:13)
expr:
<<AssignNode>> (helloworld.cb:13)
lhs:
<<VariableNode>> (helloworld.cb:13)
name: "local_a"
rhs:
<<VariableNode>> (helloworld.cb:13)
name: "n"
<<ReturnNode>> (helloworld.cb:14)
expr:
<<VariableNode>> (helloworld.cb:14)
name: "local_a"
<<DefinedFunction>> (helloworld.cb:16)
name: "main"
isPrivate: false
params:
parameters:
<<Parameter>> (helloworld.cb:16)
name: "argc"
typeNode: int
<<Parameter>> (helloworld.cb:16)
name: "argv"
typeNode: char**
body:
<<BlockNode>> (helloworld.cb:16)
variables:
stmts:
<<ExprStmtNode>> (helloworld.cb:17)
expr:
<<FuncallNode>> (helloworld.cb:17)
expr:
<<VariableNode>> (helloworld.cb:17)
name: "func"
args:
<<IntegerLiteralNode>> (helloworld.cb:17)
typeNode: int
value: 2
<<IntegerLiteralNode>> (helloworld.cb:17)
typeNode: int
value: 3
<<ReturnNode>> (helloworld.cb:18)
expr:
<<IntegerLiteralNode>> (helloworld.cb:18)
typeNode: int
value: 0
3.中间代码
<<IR>> (helloworld.cb:1)
variables:
<<DefinedVariable>> (helloworld.cb:1)
name: global_a
isPrivate: false
type: int
initializer:
<<Int>>
type: INT32
value: 5
<<DefinedVariable>> (helloworld.cb:2)
name: global_b
isPrivate: false
type: long
initializer: null
<<DefinedVariable>> (helloworld.cb:3)
name: global_c
isPrivate: false
type: char*
initializer:
<<Str>>
type: INT32
entry: net.loveruby.cflat.entity.ConstantEntry@13fd745
<<DefinedVariable>> (helloworld.cb:4)
name: global_array
isPrivate: false
type: int[5]
initializer: null
<<DefinedVariable>> (helloworld.cb:5)
name: global_struct
isPrivate: false
type: struct point
initializer: null
functions:
<<DefinedFunction>> (helloworld.cb:10)
name: func
isPrivate: false
type: int(int, int)
body:
<<Assign>> (helloworld.cb:11)
lhs:
<<Addr>>
type: INT32
entity: local_a
rhs:
<<Int>>
type: INT32
value: 4
<<Assign>> (helloworld.cb:12)
lhs:
<<Addr>>
type: INT32
entity: local_a
rhs:
<<Var>>
type: INT32
entity: m
<<Assign>> (helloworld.cb:13)
lhs:
<<Addr>>
type: INT32
entity: local_a
rhs:
<<Var>>
type: INT32
entity: n
<<Return>> (helloworld.cb:14)
expr:
<<Var>>
type: INT32
entity: local_a
<<DefinedFunction>> (helloworld.cb:16)
name: main
isPrivate: false
type: int(int, char**)
body:
<<ExprStmt>> (helloworld.cb:17)
expr:
<<Call>>
type: INT32
expr:
<<Addr>>
type: INT32
entity: func
args:
<<Int>>
type: INT32
value: 2
<<Int>>
type: INT32
value: 3
<<Return>> (helloworld.cb:18)
expr:
<<Int>>
type: INT32
value: 0
4.汇编代码
.file "helloworld.cb"
.data
.globl global_a
.align 4
.type global_a,@object
.size global_a,4
global_a:
.long 5
.globl global_c
.align 4
.type global_c,@object
.size global_c,4
global_c:
.long .LC0
.section .rodata
.LC0:
.string "HelloWorld!"
.text
.globl func
.type func,@function
func:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl $4, %eax
movl %eax, -4(%ebp)
movl 8(%ebp), %eax
movl %eax, -4(%ebp)
movl 12(%ebp), %eax
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
jmp .L0
.L0:
movl %ebp, %esp
popl %ebp
ret
.size func,.-func
.globl main
.type main,@function
main:
pushl %ebp
movl %esp, %ebp
movl $3, %eax
pushl %eax
movl $2, %eax
pushl %eax
call func
addl $8, %esp
movl $0, %eax
jmp .L1
.L1:
movl %ebp, %esp
popl %ebp
ret
.size main,.-main
.comm global_b,4,4
.comm global_array,20,4
.comm global_struct,8,8
《深入理解Android虚拟机内存管理》示例程序编译阶段生成的各种语法树完整版的更多相关文章
- 自己写的书《深入理解Android虚拟机内存管理》,不出版只是写着玩
百度网盘地址:https://pan.baidu.com/s/1jI4xZgE 我给起的书名叫做<深入理解Android虚拟机内存管理>.本书分为两个部分,前半部分主要是我对Linux0. ...
- 深入理解Java虚拟机—内存管理机制
前面说过了类的加载机制,里面讲到了类的初始化中时用到了一部分内存管理的知识,这里让我们来看下Java虚拟机是如何管理内存的. 先让我们来看张图 有些文章中对线程隔离区还称之为线程独占区,其实是一个意思 ...
- 理解Android虚拟机体系结构
1 什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的 ...
- 理解Android虚拟机体系结构(转)
1 什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的 ...
- Android 之 内存管理-查看内存泄露(三)
概述 在android的开发中,要时刻主要内存的分配和垃圾回收,因为系统为每一个dalvik虚拟机分配的内存是有限的,在google的G1中,分配的最大堆大小只有16M,后来的机器一般都为24M,实在 ...
- 深入理解C语言内存管理
之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言的内存分配了解的太少. 问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及 ...
- Android Dalvikvm 内存管理理解
网上非常多文件介绍了 jvm 内存管理的理论,但在 Dalvikvm 中,到底是怎样实现的. 这几天猛看了 Dalvikvm 的源码,说一下我的理解: 在大层面上讲跟理论一样,jvm 把内存分成了一些 ...
- 深入理解java虚拟机---java虚拟机内存管理(五)
1.深入理解java虚拟机 总图: 1.线程共享区: 2.线程独占区: 1.程序计数器 理解为当前线程锁执行的字节码的行号指示器,程序计数器没有内存异常错误.
- davlik虚拟机内存管理之一——内存分配
转载自http://www.miui.com/thread-74715-1-1.html dalvik虚拟机是Google在Android平台上的Java虚拟机的实现,内存管理是dalvik虚拟机中的 ...
随机推荐
- BZOJ 1606 USACO 2008 Dec. 购买干草
[题意概述] 有n件物品,每件物品有体积Vi,背包容量为C,问最多可以装多少体积的物品 [题解] 显然是个无限背包嘛.. 直接做背包DP就好 注意无限背包的写法和01背包的区别 #include< ...
- BZOJ 4327 [JSOI2012]玄武密码 (AC自动机)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4327 题解: 做法挺显然,建出AC自动机之后在上面跑,标记所有走过的点,然后再进行递推 ...
- 【codeforces 514E】Darth Vader and Tree
[题目链接]:http://codeforces.com/problemset/problem/514/E [题意] 无限节点的树; 每个节点都有n个儿子节点; 且每个节点与其第i个节点的距离都是ai ...
- Hadoop2.2.0 注意事项
1.启动前必须把防火墙关了,要不然会导致nodemanager启动不了. 关闭防火墙:service iptables stop 永久关闭(重启后默认关闭):chkconfig iptables of ...
- N天学习一个linux命令之netstat
用途 打印网络连接,路由表,网卡信息,假连接,组播成员信息 用法 1 显示网络连接信息 netstat [address_family_options] [--tcp|-t] [--udp|-u] [ ...
- [Cocos2d-x v3.x]Mac OX 创建新的Cocos2d-x 3.0 项目
文章内容来自于: http://cocos2d-x.org/wiki/How_to_Start_A_New_Cocos2D-X_Game Mac OS X 10.9 Software Requirem ...
- elciple中怎样设置字体大小
(1)假设想改变Java代码字体大小等 Window->perference->General->Appearance->Colors and Fonts->找到 须要更 ...
- 一个基于cocos2d-x 3.0和Box2d的demo小程序
p图demo小应用.想怎么p就怎么p 本文參考于http://blog.csdn.net/xiaominghimi/article/details/6776096和http://www.cnblogs ...
- PHP中JSON的应用
文章来源:PHP开发学习门户 地址: http://www.phpthinking.com/archives/513 互联网的今天,AJAX已经不是什么陌生的词汇了.说起AJAX,可能会马上想起因R ...
- linux下apache+openssl配置记录
软件环境 Apache Httpd 2.2.29 (http://httpd.apache.org ) OpenSSL 1.0.1h (http://www.openssl.org/source ) ...