杂
文章平均质量分 55
LemintC
这个作者很懒,什么都没留下…
展开
-
linux 中的奇怪注释
People celebrate: “We love our President!”原创 2021-02-09 17:25:11 · 142 阅读 · 0 评论 -
关于epoll机制
世上本没有光,佛说要有光,于是便有了光,随即有了太阳。行文思路:概述epoll的设计思想代码分析:大致熟悉核心结构从3个核心系统调用入手代码流程(同时深入对数据结构的理解)分析几个重要函数其他tech datailsET LT惊群效应设计思想我们希望能实现下述功能:进程睡眠,一批fd上某个fd有事件发生的时候,进程被唤醒来处理。select/poll的设计逻辑:将进程同时挂载到所有fd相关的睡眠队列上;任意一个fd的底层机制有事件触发后都会唤醒该进程;该进程被唤醒后,知原创 2020-12-07 13:43:34 · 414 阅读 · 0 评论 -
关于无锁队列(基于数组)
锁的底层必然有着原子操作,而其设计为通用场景使用,我们抛弃锁的使用,直接从更细粒度来使用原子操作确保队列的一致性————称为无锁队列什么样的队列可以支持并发的多生产者多消费者?确保并发的copy过程互不影响;确保并发的指针更新操作原子不丢失。(指针操作无非是值的操作,不存在顺序问题)如何确保上述两点?最粗暴的方式就是直接加一把大锁,确保每个producer/consumer的copy + 指针更新这个完整过程是原子的。显然这个锁太大了,不好。确保上述两点的另一种方式copy前原子更新指原创 2020-12-06 18:17:33 · 252 阅读 · 0 评论 -
ycm的安装
ycm的安装有很多很多问题,说到底都是各种软件版本错误或者不够,其中包括不限于:gcc 要足够,能支持c++17。升级了gcc后,注意设置好libstdc++.so.6python版本不够,目前不支持python3.5了其他问题:C系不要使用clang-completer了,直接使用clangd-completer...原创 2020-12-01 21:25:35 · 319 阅读 · 0 评论 -
关于list_head等
或许是由于先学习C++的原因,对于内核中的list_head, kobject, device等结构,从OO思想来分析,由于无法完全与C++中的OOP的概念对应起来,总是感觉有一些不舒服。我尝试从另一个角度来理解:我认为list_head, kobject, kset, device, ref_count_t这些结构都是通过寄生的方式来赋予其他结构某些能力。或者说当你定义的结构需要某些能力的时候,就向其中插入这些结构。譬如:当你希望你的结构能够链起来,就插入list_head结构;当你希望你的结构能够有原创 2020-11-27 23:30:13 · 134 阅读 · 0 评论 -
重复是可耻的
文章目录重复是程序员最可耻的事情,系统中的每一项只是都必须具有单一,无歧义,权威的表示重复来自于多方面:强加的重复——开发者觉得无可选择,环境要求必须重复。对于信息在系统不同模块的重复表示,我们可以选择,单独维护信息的元数据,使用生产器在系统不同模块生成信息的不同表示。代码与文档的重复语言导致的重复,我们在C的.h文件与.c文件中重复。使用头文件描述接口,使用.c文件描述tech details(使用者根本不care)无意的重复——根本没有意识到有时候为了性能问题,而带来重复(缓原创 2020-11-24 16:37:35 · 210 阅读 · 1 评论 -
mTCP环境配置详细过程
强烈建议:上手配置mTCP环境前,先手动尝试一下DPDK的环境配置安装操作。主要过程参照mTCP官方配置教程。可以选择先使用官方教程的安装脚本,运气好的话,说不定一步搞定。前言:mTCP是一个用户态协议栈,其底层需要相关的包处理层支持,最常见的就是DPDK。所以说在mTCP的源码文件中是直接附带了一个DPDK的。总的说来,官方的安装步骤大致分成三部分:检查安装该有的库安装dpdk环境安装mTCP环境接下来详细叙述安装步骤:相关库的安装以及检查,linux头文件的检查:- libdpd原创 2020-05-28 11:04:40 · 1514 阅读 · 0 评论 -
解决一道leetcode题目的不固定的流程
文章目录注:本文描述的流程是不固定的,下面描述的各个点,可以说不是一种强制的流程,更像介乎于一种想法与流程之间的内容。可以按照这个流程来解决问题,也可以仅仅参考其中的一些想法。看懂问题的描述,理解题目给的几个示例。使用自己的语言,关闭题目的网页,重新描述题目。这是确保自己理解了题目的第一步。头脑风暴。将关于这个题目能够想到的一切,按点记录下来,做为后续分析的材料。尝试使用一些数学的语言...原创 2019-08-27 11:00:15 · 158 阅读 · 0 评论 -
一些疑问待解决
int main(int argc, char* argv[]){ int n = stoi(argv[1]); vector<int> vInt(n, 0);}上述代码中使用一个main函数的参数来初始化vInt。就是说vInt的大小在运行的时候才能够确定,那么vInt的空间分配是否应该是动态的在堆中分配的????那么vInt的应该手动分配与销毁的???那么上述代码能否顺...原创 2019-08-06 09:40:19 · 132 阅读 · 0 评论 -
短路与 短路或
短路与e1 && e2先计算e1的值,如果能够确定整个表达式的值(即e1为假),则不计算e2短路或e1 || e2先计算e2的值,如果能够确定整个表达式的值(即e1为真),则不计算e2用处对于短路与&&,可以用于先判断指针是否为空,在通过解析指针对指针指向内容进行判断。譬如: (p != nullptr) && (*p == 0) 这...原创 2019-07-09 11:37:39 · 249 阅读 · 0 评论 -
空指针与野指针
野指针是没有初始化的指针,其指向的内容是任意的,其最大的特点就是不可控。空指针是指向地址为0的指针,其指向位置是可知的,是可控的。注:在c中,任何对象或者函数的指针其值都不可能是0。即&操作符是永远不可能取到0地址的。注2:永远不能对空指针解引用。注3:对野指针解引用,是不可控的,出错的时候不容易被发现。对空指针解引用,直接出现运行错误。...原创 2019-07-16 20:14:01 · 291 阅读 · 0 评论 -
从leetcode75 sortColors与快排PARTITION过程说起
从leetcode75 sortColors与快排的PARTITION过程说起注意一些前提说明一些前提问题描述问题整体分析解决方法的整体思路PARTITION过程分析leetcode75题分析关于指针变换与元素交换过程的总结分析扩展1扩展2leetcode官方解题思路分析注意初始化的时候,各个指针不能相同,如果相同的话,交换过程就会出错,可能会将一个元素进行了多次交换。所以在算法导论的快排中,...原创 2019-07-04 09:15:19 · 176 阅读 · 0 评论