随笔分类 - Linux && C
C语言碰到的一些问题
摘要:(1<<(x&31)) & mask):这个mask是一个32bit数, 假设是0xaaaaaaaa.刚开始理解这个费啦很多时间,我们可以先折1/4来看。表达式则变成啦:(1<<(x&(2^8-1))) & 0xaa) == (1<<(x&15)) & 0xaa): x&15得到的范围是[0,15)
阅读全文
摘要:先上代码看下错误的例子: 编译提示:./include/thread_pool.h:31:5: error: unknown type name ‘thpool_handle_t’ 修改如下解决:
阅读全文
摘要:一年多过去啦,一段时间没有posix多线程的东西,又忘记的差不多略,我打记性咋这么差,丝毫记不起来怎么用啦,还是不如烂笔头啊。 大家都知道条件变量需要配合mutex一起使用,往往是这样的:lock->signal->unlock, 而另一边呢是: lock->wait->unlock. 在调用pth
阅读全文
摘要:首先看一段代码 我跑在ubuntu16.04, 输出的结果是: 但是同样的程序跑在ubuntu14.04的虚拟机上,运行的结果是: mempcy 组内拷贝看起来是不安全的。需要进一步研究。 不同的公司对于stdlib function的实现不同,像这种内存重叠的拷贝需要使用api memmove()
阅读全文
摘要:今日饱受一个全局变量的危害,导致多个项目出现问题,揪其根本原因是,全局变量的危害导致的。这里转载一篇关于全局变量危害的代码:工作也有些年头了,从一位技术新人成长到现在自诩小牛级别的人物,少不了要自己寻找资料阅读。论坛上、书店里、杂志上......要嘛是些菜鸟浅薄的自炫处女贴,要嘛是高屋建瓴云里来雾里
阅读全文
摘要:本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。 本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的
阅读全文
摘要:BSS段 在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。.bss section 的空间结构类似于 stack 特征[编辑] 静态变量、
阅读全文
摘要:转载自:http://englishman2008.blog.163.com/blog/static/2801290720114210254690/1.原理 int a; int size = 8; 1000(bin)计算a以size为倍数的下界数: 就让这个数(要计算的这个数)表示成二进制时,...
阅读全文
摘要:0x100,000 = 1MB0x10,000 = 64K0x1000 = 4K0x100 = 256B0x400 = 1K0x40,000,000 = 1GB131072 = 128K = 2* 0x10,000
阅读全文
摘要:预处理器(Preprocessor)1.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#defineSECONDS_PER_YEAR(60*60*24*365)UL我在这想看到几件事情:1)#define语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得...
阅读全文
摘要:数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该...
阅读全文
摘要:链表不限定元素的长度,可以动态分配元素并添加,另外经常的增删是链表优于其他数据结构的特点.今天我们用链表来实现一个队列.linkList.h#include #include #include #include #include #include #define new(type) (type *)...
阅读全文
摘要:请看下面的代码:#include#include#include#include#include#includevoid destroy(int * p){ if(p != NULL) { free(p); p = NULL; }}int main(){...
阅读全文
摘要:一 顺序表循环队列1.1 顺序循环队列定义 队列是一种运算受限的先进先出线性表,仅允许在队尾插入(入队),在队首删除(出队)。新元素入队后成为新的队尾元素,元素出队后其后继元素就成为队首元素。 队列的顺序存储结构使用一个数组和两个整型变量实现,其结构如下:1 struct Queue{2 ...
阅读全文
摘要:每一个文件,都可以通过一个struct stat的结构体来获得文件信息,其中一个成员st_nlink代表文件的链接数。 当通过shell的touch命令或者在程序中open一个带有O_CREAT的不存在的文件时,文件的链接数为1。 通常open一个已存在的文件不会影响文件的链接数。open的作用只是...
阅读全文
摘要:转载自:本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助!一. 机器数和真值在学习原码, 反码和补码之前, 需要先...
阅读全文
摘要:异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结果为0。异或的性质交换律:a ^ b = b ^ a结合律:a ^ b ^ c = a ^ (b ^...
阅读全文
摘要:字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。其实大部分人在实际的开发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。在所有的介绍字节序的文章中都会提到字节序分为两类:Big-En...
阅读全文
摘要:数据模型决定了C语言中基本数据类型与数据宽度的对应关系。我们常用的32位模型称为ILP32,而64位模型有三种:LP64、LLP64和ILP64。在64位模型中,指针一定是64位的,但是int和long的宽度则在不同的数据类型中有不同的定义。如下表:datatypeLP32ILP32LLP64LP6...
阅读全文
摘要:unsigned long long 类型的0同理:#define DEV_IIC1 ( (u64)1 << 7ULL) 这个作用是64位中的第7位作为i2c1的系统中的设备号
阅读全文