
C
文章平均质量分 55
北京-大白
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
内存对齐
概念:是一个数据类型所能存放的内存地址的属性又称字节对齐。如一个数据类型的内存对齐为8时,这个数据类型所定义出来的所有变量其内存地址都是8的倍数。自然对齐:对齐属性和数据类型的大小相等,如4字节大小的int型数据默认它的字节对齐也是4。目的:内存对齐可以提高CPU读取内存的效率。(32位的x86 CPU,一个时钟周期可以读取4个连续的内存单元,即4字节),如一个int放在奇数内存位置上,想把...原创 2018-04-02 23:18:10 · 152 阅读 · 0 评论 -
回调函数
函数指针:指向函数入口地址void Invoke(char* s);int main(){ void (*fp)(char* s); //声明一个函数指针(fp) fp=Invoke; //将Invoke函数的入口地址赋值给fp fp("Hello World!\n"); //函数指针fp实现函数调用 ...原创 2018-04-02 23:24:21 · 176 阅读 · 0 评论 -
自定义printf写法
int vprintf(const char *format, va_list arg) 发送格式化输出到stdout使用一个参数列表传递给它。printf就是用vprintf写的。定义自己的printf函数ETRACE如下:void ETRACE(const char* strLogStr,...){ va_list args; va_start(args, strL...原创 2018-04-02 23:31:53 · 6732 阅读 · 0 评论 -
c/c++ 线程池
概念原理线程池简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他的任务使用,当线程池中的线程都在处理任务时,就没有空闲线程供使用,此时,若有新的任务产生,只能等待线程池中有线程结束任务空闲才能执行为什么使用线程池因为线程的创建、和清理都是需要...转载 2018-05-02 21:24:00 · 2134 阅读 · 1 评论 -
c/c++ 标准输入输出缓冲区刷新
在一次编写用QProcess接收程序运行结果的代码中,发现可执行程序使用print cout等打印运行结果,如果不加换行符就打印不出结果后来查阅网上资料得知,换行符的作用就是刷新缓冲区,因此添加缓冲区刷新代码即可或者直接关闭缓冲区.刷新方式:fflush(stdout)setbuf(stdout, NULL);setvbuf(stdout, (char *)NULL, _IONBF, ...原创 2018-05-25 10:28:03 · 3567 阅读 · 0 评论 -
linux 显式链接so库
linux加载程序变成进程的过程fork进程, 在内核创建进程相关内核项, 加载进程可执行文件查找依赖的so库, 加载映射虚拟地址初始化程序变量动态库依赖越多, 进程启动就越慢, 并且发布程序的时候, 这些链接但没有使用的so同样要一起跟着发布, 否则进程启动时候找不到对应的so导致启动失败. 一些查看依赖的命令查看依赖关系: readelf -d xx.so查看链...原创 2018-06-08 10:49:56 · 2493 阅读 · 0 评论 -
九大排序算法
参考链接九大排序算法,你会几个?visualgo排序算法时间复杂度、空间复杂度、稳定性比较排序分类(9)1. 插入排序直接插入排序难度:简单 必须掌握思路:将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表图示:算法复杂度:O(n^2) ;稳定算法代码:void InsertSort(int a[],int n){ ...原创 2018-10-10 17:37:10 · 1173 阅读 · 0 评论