C技巧
qq_42212319
这个作者很懒,什么都没留下…
展开
-
container of()函数简介
在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源码时,像我们这样的一般人就会绝望了(这一堆都是什么呀? 函数还可以这样定义??? 怎么还有0呢??? 哎,算了,还是放弃吧。。。)。 这就是内核大佬们厉害的地方,随便两行代码就让我们怀疑人生,凡是都需要一个过程,慢慢来吧。 其实,原理很简单: 已知...转载 2018-08-17 12:28:33 · 165 阅读 · 0 评论 -
C语言高级部分
一、内存大话题1.0、内存就是程序的立足之地,体现内存重要性。1.1、内存理解:内存物理看是有很多个Bank(就是行列阵式的存储芯片),每一个Bank的列就是位宽 ,每一行就是Words,则存储单元数量=行数(words)×列数(位宽)×Bank的数量;通常也用M×W的方式来表示芯片的容量(或者说是芯片的规格/组织结构)。M是以位宽为单位的总容量,单位是兆 ,W代表位宽, 单位是bit。计...转载 2018-09-20 11:24:04 · 492 阅读 · 0 评论 -
C语言内存对齐
当你看到这个标题,仍想往下读的时候说明你已经开始关注数据在内存存储问题了。好吧,下面先想一个问题:struct stu{char sex;int length;char name[10];};sizeof (struct stu) = ???如果你的答案是:15 。那你该仔细看看下面的分析了!!!!一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正...转载 2018-09-20 11:33:42 · 329 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配...转载 2018-09-20 15:48:27 · 65 阅读 · 0 评论 -
线程同步(信号量和互斥量的区别)
“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这 个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是说,信号...转载 2018-09-25 17:11:07 · 1572 阅读 · 0 评论 -
C语言杂记
1.结构体赋值的一种方法typedef struct Fiber_t{ int a; int b; int c;} Fiber_t;int main() { Fiber_t tmp; tmp = (Fiber_t) { .a = 1, .b = 3,.c = 4 }; printf("%d,%d,%d",tmp.a,tmp.b,tmp....原创 2018-11-21 17:56:12 · 80 阅读 · 0 评论