Fork me on GitHub

随笔分类 -  语言编程

lua编程之lua与C相互调用
摘要:lua是扩展性非常良好的语言,虽然核心非常精简,但是用户可以依靠lua库来实现大部分工作。除此之外,lua还可以通过与C函数相互调用来扩展程序功能。在C中嵌入lua脚本既可以让用户在不重新编译代码的情况下修改lua代码更新程序,也可以给用户提供一个自由定制的接口,这种方法遵循了机制与策略分离的原则。... 阅读全文
posted @ 2014-10-28 20:28 coderkian 阅读(13962) 评论(1) 推荐(0)
lua编程之协程介绍
摘要:一,lua协程简介 协程(coroutine),意思就是协作的例程,最早由Melvin Conway在1963年提出并实现。跟主流程序语言中的线程不一样,线程属于侵入式组件,线程实现的系统称之为抢占式多任务系统,而协程实现的多任务系统成为协作式多任务系统。线程由于缺乏yield语义,所以运行过程中不... 阅读全文
posted @ 2014-10-26 21:56 coderkian 阅读(3504) 评论(0) 推荐(2)
lua编程之元表与元方法
摘要:一、 前言lua是一种非常轻量的动态类型语言,在1993年由由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo等人发明,lua的设计目标是轻便地嵌入宿主语言,增强系统的可扩展性和可定制性。lua的源码只有两万余行,非... 阅读全文
posted @ 2014-10-25 23:33 coderkian 阅读(2118) 评论(0) 推荐(0)
stl源码分析之hash table
摘要:本文主要分析g++ stl中哈希表的实现方法。stl中,除了以红黑树为底层存储结构的map和set,还有用哈希表实现的hash_map和hash_set。map和set的查询时间是对数级的,而hash_map和hash_set更快,可以达到常数级,不过哈希表需要更多内存空间,属于以空间换时间的用法,... 阅读全文
posted @ 2014-08-21 22:12 coderkian 阅读(2889) 评论(0) 推荐(1)
stl源码分析之priority queue
摘要:前面两篇介绍了gcc4.8的vector和list的源码实现,这是stl最常用了两种序列式容器。除了容器之外,stl还提供了一种借助容器实现特殊操作的组件,谓之适配器,比如stack,queue,priority queue等,本文就介绍gcc4.8的priority queue的源码实现。顾名思义... 阅读全文
posted @ 2014-08-13 00:07 coderkian 阅读(1516) 评论(0) 推荐(0)
stl源码分析之list
摘要:本文主要分析gcc4.8版本的stl list的源码实现,与vector的线性空间结构不同,list的节点是任意分散的,节点之间通过指针连接,好处是在任何位置插入删除元素都只需要常数时间,缺点是不能随机访问,查询复杂度是O(n),n为list中的元素个数。所以list非常适合应用与数据插入删除频繁的... 阅读全文
posted @ 2014-08-06 22:32 coderkian 阅读(2450) 评论(0) 推荐(1)
stl源码分析之vector
摘要:上篇简单介绍了gcc4.8提供的几种allocator的实现方法和作用,这是所有stl组件的基础,容器必须通过allocator申请分配内存和释放内存,至于底层是直接分配释放内存还是使用内存池等方法就不是组件需要考虑的事情。这篇文章开始分析gcc4.8 stl的容器源码实现。stl的容器分为序列式容... 阅读全文
posted @ 2014-08-03 15:36 coderkian 阅读(4399) 评论(0) 推荐(0)
stl源码分析之allocator
摘要:allocator封装了stl标准程序库的内存管理系统,标准库的string,容器,算法和部分iostream都是通过allocator分配和释放内存的。标准库的组件有一个参数指定使用的allocator类,比如vector的原型是:template >class vector : protecte... 阅读全文
posted @ 2014-07-24 22:55 coderkian 阅读(3833) 评论(0) 推荐(0)
一个自己实现的string
摘要:最近实现了一个string类,添加了一些c++11元素。除了基本的构造析构函数,拷贝构造和赋值函数,另外添加移动拷贝和赋值函数。default是一个很方便的特性有木有。 //default constructorKianString()=default;KianString(const char *... 阅读全文
posted @ 2014-05-11 10:26 coderkian 阅读(719) 评论(0) 推荐(0)
new表达式,operator new和placement new介绍
摘要:new/delete是c++中动态构造对象的表达式 ,一般情况下的new/delete都是指的new/delete表达式,这是一个操作符,和sizeof一样,不能改变其意义。new/delete表达式的声明如下:::(optional) new (placement_params)(optional... 阅读全文
posted @ 2014-04-25 15:13 coderkian 阅读(1316) 评论(0) 推荐(0)
初识c++模板元编程
摘要:模板元编程(Template metaprogramming,简称TMP)是编译器内执行的程序,编译器读入template,编译输出的结果再与其他源码一起经过普通编译过程生成目标文件。通俗来说,普通运行程序是编译器生成的机器码,由处理器解释执行得到结果,TMP则是编译器实例化template过程中得... 阅读全文
posted @ 2014-04-23 00:26 coderkian 阅读(570) 评论(0) 推荐(1)
c++之RTTI介绍
摘要:本文介绍c++的RTTI的基本用法,并初步研究RTTI的实现原理。1. 什么是RTTIRTTI即运行时类型识别(runtime type identification),用于判断指针或引用所绑定对象的动态类型,由两个运算符实现:dynamic_cast 将基类指针或引用安全地转换为派生类的指针或引用typeid 返回表达式的类型2. 为什么要用RTTI当我们需要对象的类型信息时,比如需要使用非虚函数,有必要知道当前指针绑定的对象的动态类型。3. 如何使用RTTIdynamic_cast用于安全的向下转型(type-safe downcast)。需要注意两点:运算符作用的对象必须含有虚函数。作用 阅读全文
posted @ 2014-04-10 23:57 coderkian 阅读(1627) 评论(0) 推荐(0)
c++对象内存布局
摘要:这篇文章我要简单地讲解下c++对象的内存布局,虽然已经有很多很好的文章,不过通过实现发现有些地方不同的编译器还是会有差别的,希望和大家交流。在没有用到虚函数的时候,C++的对象内存布局和c语言的struct是一样的,这个比较容易理解,本文只对有虚函数的情况作分析,大致可以从以下几个方面阐述,1. 单一继承2. 多重继承3. 虚继承下面循序渐进的逐个分析,环境是ubuntu 12.04.3 LTS+gcc4.8.1单一继承为了实现运行时多态,虚函数的地址并不能在编译期决定,需要运行时通过虚函数表查找实际调用的虚函数地址。单一继承主要要弄明白两个问题:1.虚函数表在哪里?2. 基类和派生类的虚函数 阅读全文
posted @ 2014-04-07 01:01 coderkian 阅读(1689) 评论(10) 推荐(1)
c++11之lambda表达式
摘要:Lambda是c++11中最重要的新特性之一,cppreference.com是这样定义的:an unnamed function object capable of capturing variables in scope。即可以使用临时局部变量的匿名函数。Lambda的完整语法如下:[ capture ] ( params ) mutable(optional) exception attribute -> ret { body }除了[ capture ]和{ body }是必需的,其他都可以省略。CaptureCapture定义了lambda需要使用的同一作用域的局部变量,全局变 阅读全文
posted @ 2014-03-20 22:41 coderkian 阅读(410) 评论(0) 推荐(1)
c++11之右值引用
摘要:本文大部分来自这里,并不是完全着行翻译,如有不明白的地方请参考原文。在c++中,创建临时对象的开销对程序的影响一直很大,比如以下这个例子:String getName(){ return “Kian”;}string name = getName();name对象的构建可以细分为3步:1. 用kian构建函数内的局部string对象tmp12. 调用复制构造函数将tmp1复制到tmp2,并析构tmp1.3. 调用赋值拷贝函数将tmp2拷贝到name,并析构tmp2。所以一共做了3次内存分配,两次复制拷贝操作,但是tmp1和tmp2都马上析构了,如果内存分配很大的话,这里的资源浪费是很可观... 阅读全文
posted @ 2014-03-16 23:38 coderkian 阅读(549) 评论(0) 推荐(0)
c++11之智能指针
摘要:本文介绍c++的四种智能指针,其中后三种是c++11新增加的,auto _ptr已被弃用。要编译c++11,需要安装g++-4.8sudo add-apt-repository ppa:ubuntu-toolchain-r/testsudo apt-get updatesudo apt-get instal gcc-4.8sudo apt-get install g++-4.8编译时指定标准:g++-4.8 -std=c++11auto_ptr详细请参考这里auto_ptr是为了推动RAII而加入到c++标准的第一个智能指针,它实现了最基本的资源管理,不过与其他类型不同的是,auto_ptr是 阅读全文
posted @ 2014-01-08 22:59 coderkian 阅读(2710) 评论(5) 推荐(3)
关于构造函数和异常的分析
摘要:如果构造函数内发生异常,已经分配的资源是不会自动释放的,比如class B{public: B(){ printf("into B constructor\n"); } ~B(){ printf("into B destructor\n"); }};class C{public: C(){ printf("into C constructor\n"); throw std::runtime_error(" exception from C constructor"); } ~C()... 阅读全文
posted @ 2013-12-21 22:57 coderkian 阅读(1233) 评论(0) 推荐(0)
c和c++的强制类型转换
摘要:我们知道c语言中的类型转换只有一种,TYPE b = (TYPE)a;而在c++中按照不同作用的转换类型将其细分为三个显示类型转换符号static_cast, const_cast, reinterpret_cast,这种显示转换可以提供更丰富的含义和功能,更好的类型检查机制,方便代码的维护。1.static_cast主要用于相关类型之间的转换,如c的基本数据类型char,int,double等之间,以及基类和子类之间转换(没有dynamic_cast安全),可能会有字节转换,不可以转换不相关类型如int*和double*,以及没有继承关系的类指针void*与其他类型指针之间的转换double 阅读全文
posted @ 2013-12-20 22:41 coderkian 阅读(4712) 评论(0) 推荐(0)
特殊的attribute机制
摘要:__attribute__机制是GNU C的一大特色,可以用来设置函数,变量和数据类型的属性,下面对工作中正好用到的两个属性做下简单介绍。1. constructor 这个属性指定函数在main函数执行之前执行static void RunBeforeMain(void) __attribute__ ((constructor));void RunBeforeMain(void){ printf(“%s \n”, __FUNCTION__);}int main(void){ printf(“%s\n”,__FUNCTION__); return 0;}输出顺序如下:Runb... 阅读全文
posted @ 2013-12-03 00:06 coderkian 阅读(494) 评论(2) 推荐(0)



作者:coderkian
出处:http://www.cnblogs.com/coderkian/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。