自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

TTc 's share

focus

  • 博客(217)
  • 资源 (8)
  • 收藏
  • 关注

原创 Graphics Plan 2020~2030

Graphics Plan 2020~2030Why Study Computer Graphics?Answer: Computer Graphics is AWESOME!Fundamental Intellectual ChallengesCreates and interacts with realistic virtual worldRequires understanding of all aspects of physical worldNew computing me

2020-08-25 15:44:47 492

原创 Lua5.3 虚拟机指令分析(十)表相关指令

Lua5.3 虚拟机指令分析(十)表相关指令OP_NEWTABLEOP_NEWTABLE,/* A B C R(A) := {} (size = B,C) */创建一个新表,结果存放在A所在的栈位置,表的数组大小为B,表的Hash大小为C. TTcs-Mac-mini:OpCode ttc$ cat tOP_NEWTABLE.lua local a = {}a[

2017-08-20 01:58:37 580

原创 Lua5.3 虚拟机指令分析(八)循环

Lua5.3 虚拟机指令分析(八)循环whileLua 处了 for 循环之外的其它各种循环(while)都使用关系和逻辑指令,配合JMP 指令来完成。TTcs-Mac-mini:OpCode ttc$ cat tOP_WHILE.lualocal a = 0; while(a < 10) do a = a + 1; end print(a)TTcs-Mac-mini:OpC

2017-08-20 01:57:54 628

原创 Lua5.3 虚拟机指令分析(六)不定参数

Lua5.3 虚拟机指令分析(六)不定参数OP_VARARGOP_VARARG,/* A B R(A), R(A+1), ..., R(A+B-2) = vararg */TTcs-Mac-mini:OpCode ttc$ cat tOP_VARARG.luaf1 = function(...) endf1(10,20,...)TTcs-Mac-mini:OpCode ttc

2017-08-20 01:57:12 972

原创 Lua5.3 虚拟机指令分析(五)函数调用

Lua5.3 虚拟机指令分析(五)函数调用OP_CLOSUREOP_CLOSURE,/* A Bx R(A) := closure(KPROTO[Bx]) */TTcs-Mac-mini:OpCode ttc$ cat tOP_CLOSURE.luafunction f1() endTTcs-Mac-mini:OpCode ttc$ ./luac -l -l tOP_CL

2017-08-20 01:56:30 695

原创 Lua5.3 虚拟机指令分析(四)分支与跳转

Lua5.3 虚拟机指令分析(四)分支与跳转EQ 、LT、LE、TEST、TESTEST 五个分支指令必须与后面的紧挨的 JMP 指令看做一体。当条件成立时,继续运行;条件不成立时,跳转到指定位置。OP_JMP,/* A sBx pc+=sBx; if (A) close all upvalues >= R(A - 1) */OP_EQ,/* A B C if ((RK(B) =

2017-08-19 09:10:25 839

原创 Lua5.3 虚拟机指令分析(三)表达式运算

Lua5.3 虚拟机指令分析(三)表达式运算二元运算TTcs-Mac-mini:OpCode ttc$ cat tOP_Arith.lua local t = 1t = t + 1t = t - 1t = t * 1t = t / 1t = t % 1t = t ^ 1t = t // 1t = t & 1t = t | 1t = t ~ 1t = t << 1t = t

2017-08-19 09:08:03 430

原创 Lua5.3 虚拟机指令分析(二)赋值指令

Lua5.3 虚拟机指令分析(二)赋值指令Lua VM 是基于寄存器结构实现的,也就是说,每段 Lua  chunk 代码都被翻译为一组对256 个寄存器的操作指令。这有点类似于我们为Lua编写 C 扩展。 C 函数通常是从 lua_State 中取出参数逐个记录在 C 的局部变量中,然后利用C 代码直接对这些值进行操作。可以类比 把寄存器类比于 Lua 的寄存器。它们的确有相似之处, C 中的局

2017-08-19 09:06:25 1080

原创 Lua5.3 虚拟机指令分析(一)概述

Lua5.3 虚拟机指令分析(一)概述概述Lua VM 使用的是 Register based VM。 指令都是在已经分配好的寄存器中存取操作数。 add a b c 将 寄存器 b 与 寄存器 c 中的值相加,结果存在 寄存器 a 中。 标准的三地址指令,每条指令的表达能力很强,并有效的减少了内存赋值操作。#if LUAI_BITSINT >= 32typedef unsigne

2017-08-19 09:03:32 2511

原创 Lua5.3 VM 分析(八)For 循环

Lua5.3 VM 分析(八)For 循环Lua 支持两种 for 循环,一种是 C 语言系 的 数字循环,另外一种支持 迭代器。 stat ::= for Name ‘=’ exp ‘,’ exp [‘,’ exp] do block end for v = e1, e2, e3 do block endLua 手册中使用下列操作模拟。 do local var, l

2017-08-19 07:45:21 1036

原创 Lua5.3 VM 分析(七)生成闭包

Lua5.3 VM 分析(七)生成闭包在Lua 中,函数是一等公民。一切代码都是函数,准确的说是闭包。当我们执行一段程序时,其实就是调用一个函数。加载一个库,也是调用一个函数。加载一个Lua 源文件,里面即使定义了很多 Lua 函数,但是 它整体依旧是单个函数。所以,每段完整的字节码都是一个Lua 函数。而每个函数里可以附有很多个函数原型 Proto。函数原型 Proto 没有放在常量表中,而是单

2017-08-19 07:44:24 466

原创 Lua5.3 VM 分析(四)分支和跳转

Lua5.3 VM 分析(四)分支和跳转Lua VM 定义了 OP_EQ、OP_LT、OP_LE、OP_TEST、OP_TESTSET 五种分支操作。这五个分支指令必须与 之后的 跳转指令 JMP 看做一个整体解释。也就是说:当条件成立时,继续运行;条件不成立时,跳转到指定位置。如果条件成立跳转到L1, 否则跳转到L2: L1: success() jmp exit L2:

2017-08-19 07:43:09 930

原创 Lua5.3 VM 分析(三)表达式运算

Lua5.3 VM 分析(三)表达式运算二元运算+、-、*、%、^、/、//、&、 |、\~、\<\<、>> 这 12 种二元运算 OP_ADD、OP_SUB、OP_MUL、OP_DIV、OP_POW、OP_MOD、OP_IDIV、OP_BAND、OP_BOR、OP_BXOR、OP_SHL、OP_SHR ### vmcase(OP_ADD) { TValu

2017-08-19 07:40:44 1111

原创 Lua5.3 VM 分析(一)字节码运行

Lua5.3 VM 分析(一)字节码运行luaV_execute 是Lua VM 执行一段字节码的入口。Lua VM 就是一个状态机,从当前调用栈上次运行点开始解释字节码指令,直到下一个 C 边界跳出点(可以是函数执行完毕,也可以是一次协程 yield 操作)。Lua 函数部分typedef struct CallInfo { StkId func; /* function index in

2017-08-19 07:27:41 2397

原创 Lua 5.3 源码分析 (七) 闭包 Closure

Lua 5.3 源码分析 (七) 闭包 Closure概述闭包(Closure)在函数式编程中是一个重要概念,如果说 C+ + 的面向对象编程是把一组函数绑定到特定的数据类型上的话,那么闭包就是把一组数据绑定到特定的函数上。当调用 counter 后,会得到一个函数。这个函数每调用一次,返回值会加一。 我们把这个返回的你们函数记作一个计数器。counter 可以产生多个计数器,每个都独立计算

2017-08-18 11:46:21 1725

原创 Lua 5.3 源码分析(六) 字符串 Table

Lua 5.3 源码分析 (六) 表 Tabletypedef union TKey { struct { TValuefields; int next; /* for chaining (offset for next node) */ } nk; TValue tvk;} TKey;/* copy a value into a key without messi

2017-08-18 11:31:26 615

原创 Lua 5.3 源码分析(四)线程 lua_State

Lua 5.3 源码分析(四)线程 lua_StateLua 的THREAD 类型定义如下图: /* ** ‘per thread’ state */ struct lua_State { //1 Lua 类型公共头部 CommonHeader; //2 global_State *l_G

2017-08-18 11:16:51 2346

原创 Lua 5.3 源码分析(一)类型系统

Lua 5.3 源码分析(一)类型系统数据类型/*** basic types*/#define LUA_TNONE (-1)#define LUA_TNIL 0#define LUA_TBOOLEAN 1#define LUA_TLIGHTUSERDATA 2#define LUA_TNUMBER 3#define LUA_TSTRI

2017-08-18 10:31:17 2849 1

原创 Lua 5.3 源码分析(十)线程的执行与中断

Lua 5.3 源码分析(十)线程的执行与中断Lua 的程序运行时以线程为单位的。每个Lua 线程可以独立运行直到自行中断,把中断的信息留在状态机中。每条线程的执行互不干扰,可以独立延续之前中断的执行过程。Lua 线程和系统线程无关,所以不会为每条 Lua 线程创建独立的系统堆栈,而是利用自己维护的线程栈,内存开销也就远小于系统线程。Lua 是一门嵌入式语言,和 C 语言混合编程是一种常态。 一旦L

2017-08-18 09:56:57 2432

原创 SqQueue循环队列的 顺序存储实现

//---循环队列----队列的顺序存储结构-----#define MAX_QSIZE 100 // z最大队列长度typedef int ElemType;typedef struct { ElemType *base; int front; //头指针,若队列不空则指向队列头元素 int rear; //尾指针,若队列不空,指向队列尾元素的下一个元素}

2016-05-25 16:57:43 3243

原创 Queue队列 链式存储实现

//// Queue.h// Algorithms&Data_structures//// Created by TTc on 15-2-2.// Copyright (c) 2015年 TTc. All rights reserved.//#ifndef __Algorithms_Data_structures__Queue__#define __Algorithms_Dat

2016-05-25 16:56:00 413

原创 Stack栈  链式存储 实现

//// Stack.h// Algorithms&Data_structures//// Created by TTc on 15-2-2.// Copyright (c) 2015年 TTc. All rights reserved.//#ifndef __Algorithms_Data_structures__Stack__#define __Algorithms_Dat

2016-05-25 16:50:55 439

原创 Clist循环链表的实现

//// Clist.h// Algorithms&Data_structures//// Created by TTc on 15-2-2.// Copyright (c) 2015年 TTc. All rights reserved.///** * 循环链表 */#ifndef __Algorithms_Data_structures__Clist__#defin

2016-05-25 16:45:24 857

原创 DList双向链表

//// DList.h// Algorithms&Data_structures//// Created by TTc on 15-2-2.// Copyright (c) 2015年 TTc. All rights reserved.//#ifndef __Algorithms_Data_structures__DList__#define __Algorithms_

2016-05-25 16:35:09 6293

原创 List单链表实现

//// List.h// Algorithms&Data_structures//// Created by TTc on 15-2-2.// Copyright (c) 2015年 TTc. All rights reserved.///* defined(__Algorithms_Data_structures__List__) */#ifndef __Algorithm

2016-05-25 16:27:45 2934

原创 关于知识、技能、能力的理解?(个人理解)

知识是懂,技能是做,能力是成。知识是懂得为什么,技能是知道如何做,能力是能够做成功。有知识,可以更高效灵活的掌握技能;多一项技能,就多一分能力;除了知识技能,能力还包括性格,体力,口才,天赋,是个综合指标。能力是面向结果的,想做的能成,想要的能有,就可以说是有能力。

2016-04-19 09:16:13 3079

原创 关于黑客的最近感悟

上学的时候大家都有觉得黑客很酷的心理,但是实际上安全领域是一个十分枯燥的工作,也是需要经验积累的工作,更是需要绝对扎实而不是浅尝辄止的基本功。但这也只是下乘,真正的大师是做理论的,只有在理论上有突破才能真正改变一个领域的发展。别再耽误功夫在那些国内的所谓黑客技术书籍上面了,黑客不是一种技术,而是一个从业者知识的积淀。想找点东西玩玩可以试试kali linux但还是要深入基础学习啊,学校上课那点东西

2016-04-15 09:33:33 827

原创 两种并发模型 的理解(个人理解)

并发模型有两种,一种是并行工作者模型,一种是流水线模型。一、所谓并行工作者模型,举个例子来说,就好比汽车厂里面的工人,每个工人专门负责一辆车子的生产,从头到尾负责所有的工作。就好像是线程,拿到了一个请求,后面这个请求的所有工作都由这个线程来处理,直到所有这个请求的所有工作都结束。nginx的workprocessor应该就是这种模型,某个linux进程拿到了用户请求,然后负责这个请求的处理

2016-04-13 11:10:08 2658

原创 sizeof(void*)的大小到底由何决定?(个人理解)

由编译器产生的目标平台的指令集决定的。譬如说x86就是4,x64就是8.sizeof(void*)的含义就是获取一个指针的大小。指针的本质就是内存地址,因此指针的大小和内存空间有关。32位的机器内存空间是2G(windows系统),因此指针的大小必须是,凑个整数那就是32bit。因此本质上说,sizeof(void*)和编译器目标平台的内存空间有关。

2016-03-24 20:37:24 17624 1

原创 Inter asm 与  AT&T asm 比较

一、X86 寻址方式x86的通用寄存器有8个。这些寄存器在大多数指令中是可以任意选用的,比如movl 指令可以把一个立即数传送到eax 中,也可传送到ebx 中。但也有一些指令规定只能用其中某个寄存器做某种用途,例如除法指令idivl 要求被除数在eax 寄存器中,edx 寄存器必须是0,而除数可以在任意寄存器中,计算结果的商数保存在eax 寄存器中(覆盖原来的被除数),余数保存在

2016-03-24 20:36:27 1536

原创 AT&T汇编enter、leave、call、ret指令

enter指令在AT&T汇编中,enter等效于以下汇编指令:pushl %ebp        # 将%ebp压栈movl %esp %ebp    # 将%esp保存到%ebp, 这两步是函数的标准开头leave指令在AT&T汇编中,leave等效于以下汇编指令:movl %ebp, %esppopl %ebpcall指令

2016-03-24 20:35:50 3124 2

原创 地址空间的抽象理解(个人理解)

用户程序在运行时不希望介入到这些复杂的存储器管理过程中,作为普通的程序,它需要的是一个简单的执行环境,有一个单一的地址空间、有自己的CPU,好像整个程序占有整个计算机而不用关心其它的程序(当然程序间通信的部分除外,因为这是程序主动要求跟其它程序通信和联系)。          所谓的地址空间是个比较抽象的概念,你可以把它想象成一个很大的数组,每个数组的元素是一个字节,而这个数组大小由地址空间的

2016-03-24 20:34:57 1319

原创 关于隔离

让我们回到程序的运行本质上来。用户程序在运行时不希望介入到这些复杂的存储器管理过程中,作为普通的程序,它需要的是一个简单的执行环境,有一个单一的地址空间、有自己的CPU,好像整个程序占有整个计算机而不用关心其他的程序(当然程序间通信的部分除外,因为这是程序主动要求跟其它程序通信和联系)。      所谓的地址空间是个比较抽象的概念,你可以把它想象成一个很大的数组,每个数组的元素是一个字节,而这

2016-03-03 18:07:11 518

原创 内存不够怎么办?

进程的总体目标是希望每个进程从逻辑上看都可以独占计算机的资源。OS的多任务功能使得CPU能够在多个进程之间很好地共享,从进程的角度看好像是它独占了CPU,而不用考虑其他进程分享CPU的事情。OS的I/O抽象模型也很好地实现了I/O设备的共享和抽象,那么唯一剩下的就是主存,也就是内存的分配问题了。在早期的计算机中,程序是直接运行在物理内存上的,也就是说,程序在运行时所访问的地址都是物理地

2016-03-03 18:06:38 960

原创 设备驱动

操作系统作为硬件层的上层,它是对硬件的管理和抽象。对于操作系统上面的运行库和应用程序来说,它们希望看到的是一个统一的硬件访问模式。作为应用程序的开发者,我们不希望在开发应用程序的时候直接读写硬件端口、处理硬件中断等这些繁琐的事情。由于硬件之间千差万别,它们的操作方式和访问方式都有区别。比如我们希望在显示器上面画一条直线,对于程序员来说,最好的方式是不管计算机使用什么显卡、什么显示器,多少大

2016-03-03 18:06:02 500

原创 CPU

多道程序(Multiprogramming)  : 在计算机发展的早期,CPU资源非常昂贵,如果一个CPU只能运行一个程序,那么当程序读写磁盘(当时可能是磁带)时,CPU就空闲下来了,这在当时简直是暴殄天物。于是人们很快编写了一个监控程序,当某个程序暂时无需使用CPU时,监控程序就把另外的正在等待CPU资源的程序启动,使得CPU能够充分地利用起来。这种被称为 多道程序(Multiprogr

2016-03-03 18:05:35 574

原创 操作系统做什么?

操作系统的一个功能就是提供抽象的接口,另外一个主要功能是管理硬件资源。     计算机硬件的能力是有限的,比如一个CPU一秒钟能够执行的指令条数是1亿条或者是1GB的内存能够最多同时存储1GB的数据。    无论你是否使用它,资源总是那么多。当然我们不希望自己花钱买回来的 hardware成为摆设,充分挖掘硬件的能力,使得计算机运行得更有效率,在更短的时间内处理更多的任务,才是我们

2016-03-03 18:05:05 492

原创 计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决

系统软件这个概念其实比较模糊,传统意义上一半将用于管理计算机本身的软件称为系统软件,以区别普通的应用程序。系统软件可以分成两块, 一块是平台性的,比如操作系统内核、驱动程序、运行库和数以千计的系统工具;另外一块是用于程序开发的,比如 编译器,链接器,汇编器等开发工具和开发库。计算机系统软件体系结构采用一种层的结构,有人说过一句名言:“计算机科学领域的任何问题都可

2016-03-03 18:04:26 11231 3

原创 七种寻址方式

(一)立即寻址操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数。这种寻址方式也就称为 立即数寻址方式.立即数寻址方式通常用于 通用寄存器或内存单元赋初值。立即数可以是8bit 16bit或 32bit,该数值紧跟在操作码之后。如果立即数为16bit 或32bit,那么它将按照“高高低低”的原则进行存储 。example:

2016-02-24 15:44:15 21970 2

原创 AT&T汇编语法

在IA-32系统上,汇编代码本身必须是AT&T表示法给出。AT&T汇编语法总结为以下5条规则,就足够了。寄存器通过在名称前加百分号(%)前缀引用。example:为使用eax寄存器,汇编代码中将使用%eax。(如果在C中内联汇编的话,C代码必须指定两个百分号,才能在转给汇编器的输出中形成一个百分号)。源寄存器总是在目的寄存器之前指定。 example,在mov语句中,这

2016-02-24 15:35:38 2082

pthread源代码

posix linux环境下的pthread source 通过查看源代码可以对线程的认识更加深刻 你知道吗?线程的底层实现也是调用clone[创建进程] 故有线程是轻量级的进程

2015-05-15

西蒙教程13章

西蒙教程全部13章中文教程下载,全部13章哦,opengles入门从这开始哦

2012-09-16

西蒙教程源代码(全部17章)

西蒙教程的17章全部源代码,全部的17章阿

2012-09-16

C++设计模式

设计模式精解-GoF 23 种设计模式解析附 C++实现源码

2012-09-06

cocos2d _切水果

COCOS2D_IPHONE 切水果实例, 游戏

2012-09-06

ios翻页特效demo

一种IOS 翻页特效demo,折页效果,3d翻页效果

2012-08-14

fbreader 电子阅读

android系统下的一款开源阅读器代码,支持EPUB,TXT,UMD,FB2文件格式

2012-08-14

EPUB 解析 (java)

java实现的EPUB 解析模块,从开源项目FBreader中优化出来的模块代码

2012-08-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除