- 博客(73)
- 收藏
- 关注
转载 linux 进程的创建
1. 进程号: 每个进程在被初始化的时候,系统都会为其分配一个唯一标识的进程id,称为进程号; 进程号的类型为pid_t,通过getpid()和getppid()可以获取当前进程号和当前进程的父进程的进程号;2. 进程复制: fork函数,是以父进程为蓝本复制一个新的子进程,包括复制代码段,数据段,堆栈段等,除了代码段,子进程会有自己的物理内存空间,其中的内容是和父...
2016-12-15 23:04:00
89
转载 linux中的进程和线程
应用程序:可以被操作系统执行的一组指令和参数的集合,是静态的,并存储在磁盘空间中;进程:在操作系统中在运行程序后,处于运行状态的程序,是应用程序的一个执行过程,同时也是操作系统分配内存,cpu等系统资源的基本单位;线程:进程中可以共享进程资源的一个执行单位;一个应用程序可以对应多个进程,一个进程中可以有多个执行线程;系统操作进程的方式主要是:创建进程,终止进程,已经...
2016-12-12 22:15:00
90
转载 linux 文件系统
linux的文件系统是一个广义的文件系统,可以认为linux系统对任何设备和对象的操作都是等价于对文件的操作。linux系统对所有可操作对象进行了高度的抽象,将其归纳为这么几类: 1. 普通文件:就是狭义概念上的存储在磁盘中的文件,是纯粹的存储数据的文件,例如文本文件,图片文件,可执行文件等; 2. 字符设备文件:通常指输入输出终端,键盘,串口等,通常可以用操作文件的方式...
2016-11-10 22:05:00
97
转载 gdb 调试程序
要调试生成的可执行程序,必须在生成的时候加入-g选项,生成可以调试的代码例如:gcc -o test a.c b.c -g这样gcc就会在链接的时候加入一些用于调试的符号在生成可以调试的可执行程序后,使用gdb命令进入调试模式 1 root@ubuntu:/home/leo/test/project/classes# gdb test 2 GNU gdb ...
2016-10-26 21:56:00
115
转载 makefile
一个项目中有太多文件需要编译,如果只用gcc进行手动编译,几乎是不可能的。因此,出现了makefile来完成这个任务,makefile文件定义了一些规则,当执行makefile中定义的动作时,make命令会根据定义的规则对多个文件进行编译,从而达到编译,链接和生成可执行文件的目的。1. makefile的基本规则: target:dependent objects...
2016-10-19 21:52:00
119
转载 linux下的gcc编译器
1. 编译单个文件成可执行文件gcc hello.c 生成默认的可执行文件a.out2. 编译单个文件为指定名字的可执行文件,使用-o选项指定文件名字gcc -o test main.c 生成文件名为test的可执行文件3. 编译单个源文件成目标文件(1)使用-c选项生成目标文件gcc -c main.c 生成文件名为main.o的...
2016-10-10 22:20:00
78
转载 socket 网络编程
1. 基础socket库socket.h:/** * 网络套接字库 */#ifndef Socket_h#define Socket_h#include <stdio.h>#include <string>#ifdef WIN32// windows#include <winsock.h>...
2016-08-11 10:37:00
63
转载 pthread 学习
1. 创建线程 int pthread_create (pthread_t* thread, pthread_attr_t* attr, void* (*start_routine)(void*), void* arg); thread:线程句柄,用于标示一个线程; attr(线程属性结构): 1.__detachstate(同步状态): PTHREAD...
2016-07-14 13:44:00
93
转载 状态和线程
真正的多线程是具有抢占式和内存共享两个特点,这也是导致多线程同步问题的根本原因。而lua中的线程并不存在这个问题,首先lua的线程的状态并不共享内存,其次lua的线程是协同工作的,并非抢占式的。主线程:lua_State* L = luaL_newstate() 不仅创建了一个lua状态,还创建了一个主线程,主线程不会自动回收,除非调用lua_close;子线程:lua_Stat...
2016-07-12 18:41:00
52
转载 用户自定义类型
userdata:userdata机制可以让我们在lua中使用c中的自定义数据类型。userdata表示一块动态分配的内存,这块内存就存储的自定义类型的数据,在lua脚本中使用userdata,并配合c提供的函数,就可以操作userdata了。定义一个player类型:typedef struct _Player { int id; char ...
2016-07-12 17:02:00
92
转载 在c中保存状态
1. 注册表注册表是一个普通的table,我们可以将c函数中需要保存的状态都存储在注册表中,注册表是可以被多个c模块共享的。由于注册表是一个普通table,我们同样可以在栈中对其进行操作,只是这个table的索引是由一个常量LUA_REGISTRYINDEX进行索引。如何向注册表中存入一个值对:lua_pushstring(L, "hello");lua_set...
2016-07-12 14:48:00
123
转载 lua 和 c
lua程序其实本身并不能执行,它必须依靠c语言编写的解释器来解释执行,或者说解释器为lua脚本的执行,提供了一个运行环境(lua_state),其中包括函数堆栈,内存分配和回收等机制。理论上,lua可以使用c提供的功能,如果需要在lua中使用我们特需的功能,我们可以通过编写自己的c库来进行扩展,当然,c也可以通过操作栈的方式来操作lua,这就是lua的强大之处。在c中通过l...
2016-07-11 17:16:00
99
转载 lua 基础库
数学库: 三角函数:math.sin, math.cos, math.tan, math.asin, math.acos 都以弧度为单位; 指数和对数函数:exp, log, log10; 取整函数:math.floor, math.ceil; 最大最小函数:math.max math.min; 随机函数:math.randomseed, math.rand...
2016-07-07 18:54:00
102
转载 lua 面向对象
对象的特点是: 对象拥有自己的数据,两个对象即使数据完全相同,他们也是相互独立的; 对象之间可以共享对象的行为,也就是他们的方法是一致的;lua中的table就非常适合作为一个对象,可以在table中方便的定义属性和方法: Point = { x = 0, y = 0 } Point.set = function (x, y) Point.x ...
2016-07-07 17:03:00
78
转载 lua 高级
io操作: io.input(filename):指定一个输入流,可以是标准输入stdin,也可以是一个文件路径,返回一个文件句柄; io.output(filename):指定一个输出流,可以是标准输出stdout,也可以是一个文件路径,返回一个文件句柄; io.lines():迭代器,从指定的输入流中读取一行; io.read():从指定的输入流中读取数据,如...
2016-07-06 16:03:00
149
转载 lua 基础
1. table: a = {}; a[x]不等价于a["x"],a["x"]等价于a.x,a[0]不等价于a["0"]; #a取出的是table中连续数组的长度,从下标1开始;如果a[1] = 2; a[10000] = 3; #a是1;如果a[2] = 1; #a是0; a = {[1]="a", [2]="b", [3]="c", "d", "e"}; 遍历结果是...
2016-07-05 16:16:00
90
转载 lua中的协程
lua中的协程和线程类似: 1. 协程拥有自己的独立的栈,局部变量,和指令; 2. 所有协程都可以共享全局变量; 3. 协程不能像线程那样并行执行,协程之间需要相互协调执行,同一个时刻只能运行一个协程;如何使用协程: coroutine.create:创建一个协程,返回一个协程句柄; coroutine.status:查看一个协程的状态,suspe...
2016-07-05 15:35:00
88
转载 cocos2d中的可见性检测
游戏的在进行一次渲染的时候,通常会提交大量的渲染对象给gpu。在这些需要渲染的对象中,并不是所有对象都会出现镜头中,即有一部分对象是不可见的。通常有两种方式来完成不可见对象的剔除工作:(1)直接交给图形库帮我剔除,即性能消耗在gpu端;(2)在提交图元给gpu前,在游戏逻辑中进行剔除,即性能消耗在cpu端;是将剔除操作放在cpu还是gpu来处理,没有一个具体的标准,个人认...
2016-06-15 13:06:00
305
转载 C/C++中的指针数组和数组指针
1. 指针数组 定义:int *p[n],由于[]的优先级高于*,p和[]结合成一个数组,该数组的元素存储的是int类型的指针,由于数组内容是指针,因此p+1的步长是sizeof(int*),在32位机器上,步长通常是4个字节; int a[3][4]; int *p[3]; // 指针数组,具有3个类型为(int*)的元素; p[0] = a[0]; // 将第...
2016-06-14 14:44:00
61
转载 lua 中的面向对象
lua 是一种脚步语言,语言本身并不具备面向对象的特性。但是我们依然可以利用语言的特性,模拟出面向对象的特性。面向对象的特性通常会具备:封装,继承,多态的特性,如何在lua中实现这些特性,最主要的就是利用了lua的table和metatable。 table是一种强大的关联数组,它可以使用数字和字符串做key,而且可以使用点操作符访问table的元素,因此非常使用用于存储一...
2016-05-18 17:17:00
69
转载 GLSL 中的光照计算
理论知识转载地址:http://blog.csdn.net/ym19860303/article/details/255459331.Lambert模型(漫反射)环境光:Iambdiff = Kd*Ia其中Ia 表示环境光强度,Kd(0<K<1)为材质对环境光的反射系数,Iambdiff是漫反射体与环境光交互反射的光强。方向光:Ildiff = Kd ...
2016-05-11 20:14:00
191
转载 openGL 提升渲染性能 之 顶点数组 VBO IBO VAO
使用openGL图形库绘制,都需要通过openGL接口向图像显卡提交顶点数据,显卡根据提交的数据绘制出相应的图形。openGL绘制方式有:直接模式,显示列表,顶点数组,顶点索引。直接模式:最简单,最直接的模式,但是性能是最差的,因为每绘制一个基本图元都需要提交一次数据;glBegin(GL_TRIANGLE_STRIP);glColor3ub(255,0...
2016-05-10 10:31:00
165
转载 C++ 中的返回值
C++中大致有三种返回值:值拷贝(副本),值引用和指针,返回什么类型的值要根据当时情况而定。如果返回的是大型对象的副本,那么在每一次的函数调用后返回,都会调用该对象类型的拷贝构造函数构造一个新的副本,这是一个耗时的过程。因此在不需要返回对象副本的时候,尽量返回对象的引用或者指针,与此同时,如果不会改变引用或者指针指向的对象的内容,都加上const限定符。不论是返回拷贝,...
2016-05-07 17:29:00
419
转载 游戏中逻辑线程和逻辑线程的并行
为什么要将游戏的渲染线程和逻辑线程分离?游戏中渲染是一个非常耗时的操作,特别是相对复杂的游戏,渲染通常会占据一帧中的大部分时间。而高品质的游戏都会要求FPS在60,所以一帧的时间仅仅16毫秒。如果要在16毫秒内完成逻辑和渲染双重的任务,对于大型游戏来说,通常是艰难的,即使在极度优化的情况下,也可能只能满足性能较好的设备,在性能较差的设备上,几乎不可能在16毫秒内完成所有任务...
2016-04-15 20:59:00
281
转载 排序算法 堆排序
堆:是一种完全二叉树的数据结构,并且具有每个非叶子节点(索引i,从0开始的话)的值大于其左右子节点(2*i+1)的值(大根堆),或者小于其左右子节点(2*i+2)的值(小根堆)。堆的性质决定了其根节点的值必然整个堆中的最大值或者最小值,因此使用堆的这个特性,发明了堆排序。堆排序的大致原理: 1. 建立一个堆,假如现在有一个需要被排序的数组A = {1, 3, 4, 5, 7, ...
2015-01-15 14:35:00
86
转载 图形碰撞检测 圆与矩形
先建立我们需要的数据模型:1. 向量: 1 /** 2 * 向量类,默认使用正交基 3 */ 4 public class SHVector 5 { 6 public var x:Number; 7 public var y:Number; 8 p...
2015-01-08 14:30:00
141
转载 图形碰撞检测 点与三角形
点与三角形的碰撞检测有很多方法,基本思想都是使用向量,利用向量之间的关系得出一些数据,然后利用这些数据进行判断。为了完成目的,我们先要建立基本的数据模型(代码使用的语言是ActionScrpit): 1. 向量类: 1 /** 2 * 向量类,默认使用正交基 3 */ 4 public class SHVector...
2015-01-07 15:52:00
380
转载 数字在计算机中的表示
现实生活中,我们通常使用10进制来表示我们的数字,而在计算机中使用的是“0”和“1”表示数字的二进制。 如果我们用一个字节来存储一个数字,那么这个数字在计算机中的存储形式可能是这样的:00010011。最左边的0位在带符号数字中用来表示正负号,0代表正号,1代表负号,所以它也就叫做符号位;其他位数用来表示具体数字,因此叫做数值位。 00010011如果用来表示带符号整数,...
2015-01-05 11:46:00
204
转载 PNG图片数据解析
PNG是一种非常流行的图片格式,它不仅支持透明效果,而且图片数据经过了压缩处理,所以广泛用于web等应用。PNG的文件格式: PNG文件中的数据,总是以一个固定的8个字节开头: (图片来自http://blog.csdn.net/bisword/article/details/2777121) 除此之外,PNG的其他数据都是以数据块的方式组织,它们被分为标准数据...
2014-12-30 11:34:00
379
转载 操作系统学习笔记 微内核
传统的分层操作系统: 操作系统按功能分层,只有相邻两层之间可以发生交互。在分层结构中,大多数层或所有层都在内核模式下运行。分层结构的主要问题在于,每一层必须处理相当多的功能,某一层的变化可能对相邻层产生巨大的影响,并且这些影响跟踪起来非常困难。因此导致的问题是:操作系统很难通过增加一层或者减小一层来实现专有的版本,而且相邻层之间交互太多,难以保证安全性。微内核操作系统: ...
2014-12-17 19:37:00
604
转载 操作系统学习笔记 对称多处理(SMP)
SMP:一种通过复用处理器提高程序执行并行性的方式。 根据SMP,计算机系统可以分为以下四类: 单指令单数据流(SISD):一个单处理器执行一个单指令流,对保存在一个存储器中的数据进程进行操作。 单指令多数据流(SIMD):一个机器指令控制多个处理部件步伐一致的同时执行。每个处理部件都有一个相关的数据处理空间,因此,每条指令由不同的处理器在不同 的数据集...
2014-12-17 15:40:00
168
转载 使用HTTP协下载文件
通过发送HTTP请求,下载文件头文件: 1 #ifndef __HTTP__ 2 #define __HTTP__ 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <string> 7 #include <winsock.h> 8 ...
2014-12-17 14:42:00
66
转载 DNS协议 实践
根据DNS协议发送UDP请求,然后获取IP地址头文件: 1 #ifndef __DNS__ 2 #define __DNS__ 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <string> 7 #include <winsock.h>...
2014-12-17 14:39:00
90
转载 操作系统学习笔记 线程
进程和线程 进程概念的两个特点: 资源所有权:一个进程包括一个存放进程映像(包括程序,数据,栈和进程控制块)的虚地址空间。进程拥有对资源的控制和所有权,包括主存,I/O通道,I/O设备和文件等; 调度/执行:一个进程沿着通过一个或者多个程序的一条执行路径执行,其执行过程可能与其他进程的执行过程交替进行。因此,一个具备执行状态和优先级的进程是操作系统调度并分配的实体;...
2014-12-04 15:48:00
67
转载 操作系统学习笔记 进程
进程的定义 1. 一个正在执行中的程序; 2. 一个正在计算机上执行的程序实例; 3. 能够分配给处理器并由处理器执行的实体; 4. 一个具有以下特征的活动单元:一组指令序列的执行,一个当前状态和相关系统资源的集合; 由一组元素(包括两个基本元素:程序代码和代码相关的数据集)组成的实体,如果处理器开始执行该代码,这个执行实体就称为进程。在进程执行的任意一个时...
2014-12-01 19:55:00
126
转载 操作系统学习笔记 操作系统概述
操作系统介于硬件和应用程序之间的一层软件结构,为程序的开发屏蔽了硬件细节,并提供一些列方便的接口。 操作系统主要提供以下几个方面的服务: 程序开发:操作系统提供程序开发的工具,如果编辑器,调试器,编译器等,帮助程序员开发程序。严格来说,这些工具不属于操作系统的核心; 程序运行:把指令和数据载入主存储器;初始化I/O设备;准备运行程序需要的资源;所有这些步骤都...
2014-11-19 18:07:00
74
转载 操作系统学习笔记 栈
栈是计算机控制过程调用和返回的常用技术。 栈是一个有序的元素集合,具备后进先出特点,所以只能通过栈顶访问元素。在计算机中操作栈需要三个地址,它们通常保存在处理器寄存器中。 栈指针:栈顶地址。当发生push或者pop操作时,这个指针会加1或者减1,以表示最新的栈顶指针; 栈底:保存栈底单元的地址。当对空栈发生pop操作时,则发生错误; 栈界限:保存最...
2014-11-19 12:01:00
80
转载 操作系统学习笔记 概述
计算机的四大部件 处理器(Processor):控制计算机的操作,执行数据处理功能; 主存储器(Main memory):存储程序和数据。主存中的数据会在计算机关闭后丢失; 输入/输出模块(I/O modules):用于在计算器与外部设备之间交换数据。如磁盘,打印机等; 系统总线(System bus):为处理器,主存,以及输入/输出模块之间提供通信的设施;指...
2014-11-18 21:35:00
71
转载 C语言中的fread和fwrite
C语言中的fread和fwrite是专门用来操作文件的方法。1. fread负责从打开的文件指针中读取文件内容。函数原型:size_t fread(void *p, size_t size, size_t num, FILE *fp);参数*p:一个指针,通常是字符串指针,也可以是一个数组,用来存放从文件流中读取的数据;参数size:表示读取一个单位元素的大小,以字...
2013-06-26 23:14:00
218
转载 Flash与PHP的简单socket通信
一 Flash端代码public var socket:Socket; public function init():void { socket = new Socket(); socket.connect( 'localhost', 12345 ); // 通过socket链接服务器 // 监听链接,错误和收到数据的事件对象 socket.addEven...
2013-02-24 17:19:00
75
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人