摘要:前面分析wayland的代码时,发现其使用了双向链表这个结构,后来发现和内核中的list基本一模一样,所以这里单开一个文章分析一下内核中的环形双向链表的使用。 先回忆一下我们日常定义的链表,基本上都是结构体A里包含一个指向next的A的指针。这样带来的一个最大的问题就是不通用。也就是明明链表的增,删
        
阅读全文
 
        
            
            
摘要:最近被项目上一个bug折腾的够呛,后来发现问题又是出在alpha blending上面。 其实一直以来对这个东西的了解和认知都处在一个比较浅显的层次上,直到遇到问题,才发现自己还是欠缺深入的理解。今天借着这个机会,争取一次性搞懂里面的细节。首先我们要了解一个概念,预乘alpha的RGBA (prem
        
阅读全文
 
        
            
            
摘要:栈这个东西联结了C语言,函数调用,汇编指令,操作系统,虚拟内存。总而言之就是非常的重要。 我们首先来看栈的作用,为什么需要栈,不用栈可以吗? 栈一般包括如下几方面的内容: 函数的返回地址和参数 临时变量:包括函数的局部变量以及编译器生成的其它临时变量 保存的上下文,包括在函数调用前后需要保持不变的寄
        
阅读全文
 
        
            
            
摘要:首先我们右键属性mysql 5.5 Command Line Client, 发现这是一个shell 命令的快捷方式 通过命令行启动mysql, 同时指定一个默认的配置文件为mysql的安装目录下面的my.ini文件 到你的mysql的安装目录,也就是mysql这个exe所在目录。尝试把my-sma
        
阅读全文
 
        
            
            
摘要:前面讲了静态链接有一些优化手段可以减少生成目标的体积。但是不同的目标文件中还是始终都会存在同一个静态库文件。这就是比较麻烦的事情了,静态链接至此也无能为力了。另外,如果程序是依赖静态库的,那如果日后静态库一旦更新,整个程序就要重新编译发布。想像一下,王者荣耀那么大的程序,如果每次修复了某个简单的bu
        
阅读全文
 
        
            
            
摘要:静态链接的一个显著的问题就是极大的浪费内存空间。 谈到这个概念,我们先回顾一下之前在静态链接那个章节中学到的一些链接器的优化手段: 一个是函数级别链接。也就是说开了-ffunction-sections 和 -fdata-sections , 这俩选项可以使我们的链接器自己去解析依赖,只使用目标文件
        
阅读全文
 
        
            
            
摘要:程序的装载是程序运行前,从磁盘中载入到内存的过程,装载是一个很重要的过程。 页映射是虚拟存储机制的一部分。现代操作系统的装载机制也是用到了页映射的概念。页映射是将内存和磁盘中的数据和指令按照“页”为单位划分若干个页,以后所有的装载和操作的单位就是页。 以32位平台为例,每个进程拥有4G的虚拟空间,那
        
阅读全文
 
        
            
            
摘要:1.比较分支差异 网上用的最多的方法大多数是直接 git log --left-right main dev --pretty=oneline 我在实际操作的时候发现,这个方式是有一定的缺陷的。有的时候明明某个提交在两个分支上都有,这个命令也会误报。 原因是,即使一笔提交是cherrypick到主分
        
阅读全文
 
        
            
            
摘要:基于Tile的压缩: TFBC 操作的uncompressed 数据块固定是256字节。因此一次处理的pixel数量取决于bpp 名义上,GPU中,这些块被分配为8x8 或者 16x4 对于每个tile, 都有一个对应的8字节的header, 用于描述压缩的相关细节,FBDC会根据header中的内
        
阅读全文
 
        
            
            
摘要:前面一口气学了不少内容,中间遇到了一些问题,这里及时总结一下,一来是加深印象,巩固记忆 其次也可以把遗留问题明确一下,指导后续的知识点的学习。 不同编译器可能采用不同的名字修饰方法,导致产生的目标文件无法相互链接。这也是二进制不兼容问题的来源 __attribute__((section("Foo"
        
阅读全文
 
        
            
            
摘要:这次我们来看一个新的例子 a.c的内容如下: extern int shared; int main() { int a = 10; swap(&a, &shared); } b.c的内容如下: int first_var = 2;int shared = 1; void swap(int* a, 
        
阅读全文
 
        
            
            
摘要:这个问题隶属于CPU设计的范畴 其等价问题为 CPU是如何获取指令和数据的,进一步的,指令和数据是否是分开存取的 普遍的说法是这样的,如果指令和数据分开存取,则是哈佛结构,否则是冯诺依曼结构 不要尝试去记忆这些结论,我们要去思考,去理解这个事情 以51内核的单片机为例,我们将编译后的bin文件烧录到
        
阅读全文
 
        
            
            
摘要:主要是经济基础决定上层建筑 单片机的资源受限,只有几M的主频,几K的内存ram, 和几十K的flash, 硬件上决定了单片机的开发难度上限。 对于arm来说,无非是主频升到了GHz, DDR达到了GB, emmc也很大,以及多核的加持,这么一来可玩的花样就多了。 按照单片机的玩法开发arm可以吗,肯
        
阅读全文
 
        
            
            
摘要:1.学会使用函数和shell命令组合完成复杂的事情: define all-cpp-files-under $(patsubst ./%, %, $(shell cd $(LOCAL_PATH); find -L $(1) -name "*.cpp" )) define all-cpp-files-
        
阅读全文