lua_pushvalue函数Notice

摘要: lua_pushvalue[-0, +1, -]void lua_pushvalue (lua_State *L, int index);Pushes a copy of the element at the given valid index onto the stack如上所述, lua_pushvalue(L, -4) 并不是往栈顶插入元素-4, 而是把在栈中位置为-4的元素copy之后插入于栈顶中!!! 阅读全文
posted @ 2013-04-15 16:17 Nick Yang 阅读(5897) 评论(0) 推荐(0) 编辑

Lua中ipairs()和pairs()的区别与使用

摘要: 关于ipairs()和pairs(),Lua官方手册是这样说明的:pairs (t)If t has a metamethod __pairs, calls it with t as argument and returns the first three results from the call.Otherwise, returns three values: the next function, the table t, and nil, so that the construction for k,v in pairs(t) do body endwill iterate ov... 阅读全文
posted @ 2013-03-13 10:45 Nick Yang 阅读(6255) 评论(1) 推荐(0) 编辑

链接

摘要: 链接就是讲不同部分的代码和数据收集和组合成为一个单一文件的过程,这个文件可以被加载到存储器并执行。为什么要学习关于链接的知识?理解连接器讲帮助我们构造大型程序:构造大型程序的程序员经常会遇到由于缺少模块、缺少库或者不兼容的库版本引起的连接错误。除非你理解链接器是如果解析引用、什么是库以及链接器是如何使用库来解析引用的,否则这类错误将令你感到迷惑。理解链接器将帮助你避免一些危险的编程错误:Unix链接器解析符号引用时所作的决定可以不动声色地影响你程序的正确性。在默认情况下,错误地定义多个全局变量的程序将通过链接器,而不产生警告信息。由此得到的程序会产生令人迷惑的运行时行为,而且非常难以调试。理解 阅读全文
posted @ 2013-03-08 13:01 Nick Yang 阅读(144) 评论(0) 推荐(0) 编辑

内存对齐

摘要: 最近面试,经常会遇到内存对齐的问题,总是没有答好,所以下定决心要弄清楚它。什么是字节对齐?现代计算机中内存空间都是按照byte(字节)划分的,从理论上讲似乎对任何类型的变量的访问都可以从任何地址开始, 但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。为什么要对齐?对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同,一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的cpu在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐,其他平台可 阅读全文
posted @ 2013-02-27 21:45 Nick Yang 阅读(372) 评论(0) 推荐(0) 编辑

循环展开

摘要: 循环展开,是一种牺牲程序的尺寸来加快程序的执行速度的优化方法。可以由程序员完成,也可由编译器自动优化完成。循环展开通过将循环体代码复制多次实现。循环展开能够增大指令调度的空间,减少循环分支指令的开销。循环展开可以更好地实现数据预取技术。展开循环的好处由于展开能够消除分支以及一些管理归纳变量的代码,因此可以摊销一些分支开销。展开可以积极调度(或管道化)循环以掩盖一些延迟。如果有足够的空闲寄存器使变量保持活动状态,因为通过展开相关性链展露了关键路径,这将非常有用。如果迭代次数是可预测的,并且循环中没有条件分支,则英特尔(R) 奔腾(R) 4 处理器可以正确预测迭代次数为 16 次或更少的内部循环的 阅读全文
posted @ 2013-01-17 21:59 Nick Yang 阅读(1044) 评论(0) 推荐(0) 编辑

do...while(0)的妙用

摘要: 尊敬原作者,本文摘自飞扬天下 do...while(0)的妙用在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...while(0)消除goto语句。 通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出函数,当然,退出前先释放资源,我们的代码可能是这样: version 1 boolExe. 阅读全文
posted @ 2012-11-22 22:57 Nick Yang 阅读(440) 评论(2) 推荐(3) 编辑

Git参考手册(2)-开始创建工程

摘要: 首先,你必须创建一个Git repository(Git仓库)。Git repository是存放你工程文件数据的地方。有两种方法可以创建Git repository,第一种是通过已经存在的目录创建一个新的Git repository,例如一个新的工程。第二种方式是克隆一个公开的公用的Git repository,如果你想拷贝一个工程并和其他人一起开发这个工程的话。下面将会介绍这两种方式:git init initializes a directory as a Git repository通过简单的在已存在的目录路径上执行git init,就可以创建该目录的Git repository了。例 阅读全文
posted @ 2012-11-18 17:51 Nick Yang 阅读(245) 评论(0) 推荐(0) 编辑

Git参考手册(1)-Git能为我们做什么

摘要: 过去你可能使用过像Subversion、Perforce或者其它SCM(Software Configuration Management,软件配置管理),但是Git对于版本的控制跟你之前用过的这些版本控制软件有很大的不同。抛弃对版本控制工作流程的设想,并了解Git自己的处理方式,往往更有利于学习Git。 好,那我们开始吧。假如你现在正在设计一个新的源代码管理系统,在你使用相关管理工具之前,你会如何处理基本的版本控制呢? 你有可能只是简单的拷贝工程目录: $ cp -R project project.bak 那样,当文件变得一团糟的时候你可以很容易的恢复文件,或者对比目录拷贝前后文件的改.. 阅读全文
posted @ 2012-11-18 17:12 Nick Yang 阅读(258) 评论(0) 推荐(0) 编辑

新的起点

摘要: 一直有写技术博客的想法,却总是未能付诸于行动。如今终于踏出了重要的一步,入住博客园。新的起点,新的开始,希望在这边片园地上获取更多知识,分享更多知识,还有认识更多朋友:) 阅读全文
posted @ 2012-11-18 15:28 Nick Yang 阅读(115) 评论(0) 推荐(0) 编辑