《深入理解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虚拟机中的 ...
随机推荐
- Linux:SSH连接原理
1,SSH开启 2,执行:ssh username@ip地址 例如ssh root@10.1.1.1 3,查看cat ./ssh/kown_hosts 里面就保存了10.1.1.1的公钥了 4,对比一 ...
- discourse论坛迁移
在源设备的操作备份数据文件tar -czvf discoursefile716.tar.gz /var/discourse然后把此discoursefile716.tar.gz文件传到需要迁移的设备上 ...
- NOD 1113矩阵快速幂
基准时间限制:3 秒 空间限制:131072 KB 分值: 40 给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计算结果太大,只需要输出每个元素Mod (10^ ...
- 强悍的 ubuntu —— 命令行访问网页
所谓以命令行的方式访问网页,即是在终端下以文本的形式访问网站,这里推荐一个工具:w3m, $ sudo apt-get install w3m $ w3m www.baidu.com
- bupt summer training for 16 #4 ——数论
https://vjudge.net/contest/173277#overview A.平方差公式后变为 n = (x + y)(x - y) 令 t = x - y ,变成 n = (t + 2x ...
- JPA学习(基于hibernate)
参考博客:https://blog.csdn.net/baidu_37107022/article/details/76572195 常用注解: https://blog.csdn.net/eastl ...
- Surround the Trees HDU 1392 凸包
Problem Description There are a lot of trees in an area. A peasant wants to buy a rope to surround a ...
- spring入门笔记
这是我自己学习韩顺平老师spring视频的笔记,个人认为初学spring的韩顺平老师的讲的很好,比较通俗易懂,资源地址我已经给了,可以自己配合视频看.主要介绍了ioc和aop,这也是spring框架最 ...
- code vs 2166 Bessie的体重问题
2166 Bessie的体重问题 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description Bessie像她的诸多姊妹一 ...
- bootstrap-table与Spring项目集成实例收集
bootstrap-table项目官网:https://github.com/wenzhixin/bootstrap-table bootstrap-table各版本下载:https://github ...