摘要:共享内存作为IPC(Inter-Process Communication)的一种方式,适合同一台机器上不同进程间的相互通信,由于不同进程直接对同一块"约定好"的内存进行操作,因此效率为所有IPC中最高的。 共享内存的使用还是很简单的,主要涉及到五个函数的使用,下面一一进行介绍。 (1)key_t ftok(const char *pathname, int proj_id); 功能:用来创建System V IPC的一个key值 参数:pathname:系统中真实存在的并可以访问的目录或文件 proj_id :在1~255之间的数值,...
阅读全文
摘要:好吧,我承认我标题党了。但是我仍然建议你能够继续往下读,最多花上一分钟时间。当然,如果能够浪费你十分钟以上,我的目的便达到了,而你也会有不一样的体会。 问题:你会怎样实现min & max这两个函数呢? 我想大多数人的做法无非三种:1)定义宏;2)定义函数; 3)定义inline函数。 对于第二种方法,不用多说,功能如此单一的函数效率会有折扣;对于第三种方法,inline是在较新的C99中引入的。其实我是在找理由,我太懒了,不想讨论第二种和第三种,也是在掩饰现代编译器强悍的优化能力。也许,编译器自动为你把小函数优化成内联了呢。OK,我们这里的主题是关于宏定义的,和其他无关。请看(下..
阅读全文
摘要:我不得不承认,在编程的世界,无奇不有,码农的创造力是无穷的,也是妙不可言的!只要涉及到效率,永远是没有最快,只有更快! 我们知道,在标准C中,有函数int isdigit(int c)可以用来判断字符c是否为0~9之间的数字。比如:View Code 1 int a = isdigit('1'); //a == 12 int b = isdigit('a'); //b == 03 int c = isdigi
阅读全文
摘要:在进入主题之前,这里有一个问题:在C中可以定义长度为0的数组吗? 答案是:标准的C中是不可以的,GNU C中可以。 比如定义这样一个数组:int data[0]; 使用GCC可以编译通过,而在VS下报错“cannot allocate an array of constant size 0”。 OK,下面看看怎样在GNU环境下使用长度为0的数组魔法般的定义变长结构体。这里变长不是指sizeof(struct XXX)的长度不固定,而是结构体内的变量所拥有的内存大小不固定。聪明的你也许很快就能够想到:如果在结构体中存放一个指针,然后使指针指向动态分配的内存不就可以吗?确实可以,如下:Vi...
阅读全文