01C/C++中复杂的指针的理解方法
char* const* (*ss[23][200])(void (*)(int h, void (*)(void)));
(1) 最外层: char* const * (*ss[23][200]) ( void (*) ( int h, void (*)(void) ) ); 这个相当于:T * (A) (B); 也就是一个函数指针,所指向的函数的参数是B,返回值是T的指针;
(2) 一个一个来看,先看T,char* const 是 char型的指针常量;
(3) 再看A:(* ss[23][200] ) (B),这个相当于: (* F ) (B),也就是一个函数指针;
(3.1) A的里面 ss[23][200] 是一个二维数组声明,这个数组的类型是什么呢?结合(3)就知道了:这个数组的每个元素就是(3)中分析得到的——函数指针;整理一下就是:ss[23][200]的每个元素都是一个函数指针;
(4) 再看B: ( void (*) ( int h, void(*)(void) ) ) 这个又是一个函数指针,相当于: void (*F) (P); 它指向的函数参数是P,返回值是void;
(4.1) B这个函数指针指向的函数需要2个参数:第一个参数是int型,第二个参数是:void (*)(void),即:第二个参数又是一个函数指针(这个指针很好分析,就不写了);
(5) 结合(3)和(4)就知道 (*ss[23][200]) (B) 这个数组函数指针所指向的函数的参数也是一个函数指针;
(6) 又结合 (2) 知道(5)的函数指针返回值类型。
所以,整理一下,得到:ss是一个23X200的二维数组,每个元素是一个函数指针(a);它 指向的函数的返回值是一个指针,这个返回值指针的类型是char型的指针常量;函数(a)的参数只有一个,是一个函数指针(b);(b)指向的函数返回值 是void型,参数有两个,第一个是 int 型变量,第二个又是一个函数指针(c),(c)的返回值是void,参数也是void。
02透过 Linux 内核看无锁编程
非阻塞型同步 (Non-blocking Synchronization) 简介如何正确有效的保护共享数据是编写并行程序必须面临的一个难题,通常的手段就是同步。同步可分为阻塞型同步(Blocking Synchronization)和非阻塞型同步( Non-blocking Synchronization)。
内核无锁第一层级 — 少锁
内核无锁第二层级 — 原子锁
内核无锁第三层级 — Lock-free
内核无锁第四层级 — 免锁
03c++delete后虚拟内存不降的原因(疑似内存泄漏)
简单来说,文章开头内存不断增长的趋势的根本原因是:glibc在利用操作系统的内存构建进程自身的内存池。由于进程本身处理请求量大,频繁调用new和delete,在一段时间内,进程不断的从操作系统获取内存来满足新增的调用要求,但是从最终结果上来讲,总有一个临界点,使得进程从操作系统新获取的内存和归还给操作系统的内存达成相对平衡。在这个动态平衡建立前,内存会不断增长,直到到达临界点。
04GDB加载调试共享库
GDB要调试的共享库一定要加-g编译才可以调试,检查共享库是否有调试信息,需要在应用程序目录用gdb启动应用程序,然后执行指令 info sharedlibrary 即可查看否加载了符号表和调试信息05游戏服务器的技术及组件
这篇文章, 不介绍通用的技术, 专门介绍游戏服务器内能用上的技术及组件等.06分布式模式
分布式定义:将一个完整的服务,按照业务功能,拆分成一个个独立的子服务。这些子服务能够独立运行在部署的环境中,它们之间通过RPC方式通信。
07设计模式和反模式
设计模式提供了一个在架构师和设计人员中捕获知识和经验的机制。它们提供了一种公共语言,可促进对其他地方成功应用的方法的重用,从而为软件项目带来以下方面的好处:风险更低、质量更好且交付时间更短。
而在另一方面,反模式则记录出现错误的情况——对于普遍存在的软件设计缺陷、问题进行总结。
我们将从反模式入手,通过对错误的设计方法总结,延申出正确的设计模式。
08面向对象设计
面向对象规范为对象编程定义了基本的规范,是面向对象编程的主要思想。换一种说法,面向对象规范就是基本的语法,定义了你写词造句的方式,将一个个单独的词语组合成一句完整的话语。 而面向对象设计教你如何正确地使用类,怎么把一些属性和方法封装在一个类中,怎样封装才是正确的,怎么使用继承关系。09c++ 模板类 声明和定义都放在.h文件的原因
在分离式编译的环境下,编译器编译某一个.cpp文件时并不知道另一个.cpp文件的存在,也不会去查找(当遇到未决符号时它会寄希望于连接器)。这种模式在没有模板的情况下运行良好,但遇到模板时就傻眼了,因为模板仅在需要的时候才会实例化出来,所以,当编译器只看到模板的声明时,它不能实例化该模板,只能创建一个具有外部连接的符号并期待连接器能够将符号的地址决议出来。然而当实现该模板的.cpp文件中没有用到模板的实例时,编译器懒得去实例化,所以,整个工程的.obj中就找不到一行模板实例的二进制代码,于是连接器也黔驴技穷了

10C++容器模板在共享内存中的使用
在共享内存中使用模板容器的关键问题是指针的问题,相对地址是解决这个问题比较好的方法。一个比较通用的方案是将所有的指针改成一个相对地址记录,还有一种思路对于容器的处理方式是将容器的所有数据按最大数量分配好,使用下标处理。
11STL迭代器及迭代器失效问题
1、对于关联式容器(map, list, set)元素的删除,插入操作会导致指向该元素的迭代器失效,其他元素迭代器不受影响。
2、对于顺序式容器(vector)元素的删除、插入操作会导致指向该元素以及后面的元素的迭代器失效。

点击排行

站长推荐

猜你喜欢
站点信息
- 建站时间:2016-04-01
- 文章统计:728条
- 文章评论:82条
- QQ群二维码:扫描二维码,互相交流
