《深入理解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虚拟机中的 ...
随机推荐
- JS布尔值(Boolean)转换规则
原文作者: louis 原文链接: http://louiszhai.github.io/2015/12/11/js.boolean/ 语法 众所周知, JavaScript有五个基本的值类型:num ...
- Python - 面对对象(基础)
目录 Python - 面对对象(基础) 一. 概述 二. 创建类和对象 三. 面向对象三大特征 封装 继承 多态 Python - 面对对象(基础) 一. 概述 面向过程:根据业务逻辑从上到下写垒代 ...
- Python基础-while奇数和
利用while循环计算100*座位号 以内奇数的和. n = 1 s = 0 SeatID=1 while n <= 100*SeatID: s += n n += 2 print '奇数的和: ...
- Serial Fluent UDF on Windows
test test Table of Contents 1. Serial UDF on Windows OS 1 Serial UDF on Windows OS Note: Udf has to ...
- PAT 1098. Insertion or Heap Sort
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...
- PAT 1094. The Largest Generation (层级遍历)
A family hierarchy is usually presented by a pedigree tree where all the nodes on the same level bel ...
- java中String类型转换为float类型
import java.io.*; public class Demo1{ public static void main(String args[]) { String df="12.2& ...
- F - Goldbach`s Conjecture kuangbin 基础数论
Goldbach's conjecture is one of the oldest unsolved problems in number theory and in all of mathemat ...
- 洛谷 P3078 [USACO13MAR]扑克牌型Poker Hands
P3078 [USACO13MAR]扑克牌型Poker Hands 题目描述 Bessie and her friends are playing a unique version of poker ...
- 《JAVA程序设计》实训第一天——《猜猜看》游戏
课程实训是做一个猜猜看的小游戏.对于对代码不熟悉不了解的我来说的确挺难的.可是我还是会努力的. import java.awt.EventQueue; import javax.swing.JFram ...