- 博客(88)
- 资源 (1)
- 收藏
- 关注
原创 C++ 编译链接
A.c 文件要引用 B.c 文件中的变量, 需要在A.c 或A.h 中 extern int data;符号解析就是所有obj符号表中对符号引用的地方都要找到该符号定义的地方。local 的符号不做处理 static 修饰的就是local。1 合并所有obj文件的段,并调整段偏移和段长度,合并符号表。符号处理只对所有obj文件的global符号进行处理。C语言种有强符号和弱符号的概念 初始化的是强符号 未初始化的是弱符号。objdump -h main.o 打印obj文件的段。
2023-08-31 06:46:57
237
原创 【无标题】C++内存布局
内核空间 环境变量 命令行参数 栈区 共享库加载区 堆区 .bss 未初始化 和 初始化为零 .data 初始化 .text 代码段(指令)
2023-08-30 19:35:24
160
原创 简说linux TCPIP 11讲 TIME_WAIT
简说linux TCPIP 11讲TIME_WAIT一个数据包在网络中传输的最长时间是 2MSL(发送 MSL + 等待确认ACK MSL)当主动关闭方接收到被动方的FIN+ACK后发出确认ACK后进入TIME_WAIT状态为什么会有TIME_WAIT状态?从TCP可靠性讲,主动关闭方必须确认被动关闭方收到最后的ACK。所以必须有一个TIME_WAIT的等待时间如果最后的ACK被动关闭方没有收到,那么被动关闭方将重新发送FIN+ACK,主动关闭方将重新进入TIME_WAIT状态...
2022-05-19 09:45:18
654
原创 ip_frag_next没看懂的操作
struct sk_buff *ip_frag_next(struct sk_buff *skb, struct ip_frag_state *state){ /* len初始为剩余长度 */ unsigned int len = state->left; ---| struct sk_buff *skb2; | struct iphdr *iph; |? .
2022-01-22 19:37:07
1327
原创 Vector和List的排序应用
#if 1/* vector 的排序 */#include <iostream>#include <vector>#include <algorithm> /* vector 调用algorithm里面的sort */void printVector(std::vector<int> vVector);bool ageCompare(int a, int b);int main(){ std::vector<int> .
2021-12-28 21:34:40
614
原创 Linux----barrier
首先贴一段代码吧:E:\整理分类\源码\linux-5.14.14\arch\arm64\kernel\process.c/* * Thread switching. */__notrace_funcgraph struct task_struct *__switch_to(struct task_struct *prev, struct task_struct *next){ struct task_struct *last; fpsimd_thread_switch(n.
2021-12-26 12:37:53
787
2
原创 Linuxn内核版本切换
linux 切换内核版本,切换 Linux 内核版本_庞浙闽的博客-优快云博客linux之ubuntu内核切换/设置内核版本_天使的大魔王的博客-优快云博客_ubuntu 内核版本
2021-12-26 11:41:27
395
原创 疫情搁家封闭思考
西安这个疫情真是让人担心,城市封锁,全员核算,抗疫人员最辛苦,冷的一批,还得在外面坚持核酸,哎。 思考: 1 如何在软件开发领域取得成就 2 如何提升软件开发的能力 3 如何给自己一个合理的定位 解答: 怎么理解计算机,源代码编译后主要生成两种段,数据段和指令段,说明计算机主要功能就是将输入数据按照输入指令进行计算,然后生成输出结果的一个过程。这样我们先简单建立一个计算机的...
2021-12-26 11:39:39
190
原创 进程ID的故事
进程ID:生成方法:linux采用了”延迟重用“的算法来进行PID的分配,简单说就是:1 按顺序依次递增分配2 到头了在回绕3 使用位图来快速判断ID是否已经被分配查看进程ID最大值命令:sysctl -a | grep pid_max#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include
2021-12-26 10:06:16
305
原创 linux内核侵入式链表
// 实验:;linux内核嵌入式链表#include <iostream>#include <string>struct list_head { struct list_head* next; struct list_head *prev;};#if 0// 案例1: struct list_head StuLis放在 struct Student的首部struct Student{ struct list_head StuList; .
2021-12-19 21:43:52
490
原创 linux内核对原子操作的实现
/* * ARMv6 UP and SMP safe atomic ops. We use load exclusive and * store exclusive to ensure that these are atomic. We may loop * to ensure that the update happens. */#define ATOMIC_OP(op, c_op, asm_op) \static inline void arch_atomic_##op(in.
2021-12-07 21:15:14
898
原创 动态存储器分配伙伴系统(buddy system)2
struct free_area { struct list_head free_list[MIGRATE_TYPES]; unsigned long nr_free;};E:\整理分类\源码\linux-5.14.14\include\linux\mmzone.h
2021-12-06 21:59:27
314
原创 TCP为什么三次握手
先搞一个简单的生活中的例子打电话:模拟场景:client要打电话给server在一个不可靠的信道上建立一个可靠的通话,从理论上来讲至少需要四步。
2021-12-02 09:27:31
2662
原创 高并发场景利用多核的方式
1 多线程2 多进程3 协程将功能划分成多个微服务(多线程,多进程)微服务沟通?多线程:1 pipe2 队列 actor模型 erlang(mailbox) skynet 多线程上面封装 运行实体actor+消息队列 lua vm+消息队列3 锁 互斥锁,条件变量 读写锁 cas 自旋锁 乐观悲观锁多进程:共享内存 nginx配置openresty中share_dict实现进程间通讯 全局锁管道消息队列...
2021-11-29 22:35:34
1284
原创 brk和sbrk
#include <unistd.h>int brk(void *addr);void *sbrk(intptr_t increment);sbrk/brk增量方式管理动态内存 申请内存是在动态内存后面申请 释放也是释放最后面 不能选择性的释放增量动态内存,只会从后往前释放 一般来说sbrk申请动态内存,brk来释放动态内存 sbrk/brk 都有申请和释放的功能...
2021-11-29 22:26:56
228
原创 tcmalloc性能测试
#include <sys/time.h>#include <unistd.h>#include <stdlib.h>#include <stdio.h>int main(){ struct timeval StartTime; struct timeval EndTime; double TimeUse = 0; gettimeofday(&StartTime, NULL); //测量开始 char* pTest = NUL.
2021-11-27 07:39:56
310
原创 VScode前进后退快捷键
后退:Windows: Alt + ← ;Mac: Ctrl + - ; 或者 Option + Command + ←;前进:Windows: Alt + ←;Mac: Option + Command + →;
2021-11-23 06:54:42
3238
1
原创 进程IPC-管道pipe
pipe-> pipe函数原型:#include <unistd.h> int pipe(int file_descriptor[2]);//建立管道,该函数在数组上填上两个新的文件描述符后返回0,失败返回-1。eg.int fd[2]int result = pipe(fd);pipe->sys_pipe->-------------------------------------------E:\整理分类\源...
2021-11-14 21:26:19
963
原创 进程和进程调度器的关系
D:\书籍\源码\linux-5.14.4\include\linux\sched.h 661struct task_struct {#ifdef CONFIG_THREAD_INFO_IN_TASK /* * For reasons of header soup (see current_thread_info()), this * must be the first element of task_struct. */ struct thread_info threa...
2021-11-08 20:00:37
517
原创 linux struct sched_class
D:\书籍\源码\linux-5.14.4\kernel\sched\sched.h 2104Linux中,将调度器公共的部分抽象,使用struct sched_class结构体描述一个具体的调度类。// 抽象调度类struct sched_class {#ifdef CONFIG_UCLAMP_TASK int uclamp_enabled;#endif void (*enqueue_task) (struct rq *rq, struct task_struct *p,...
2021-11-08 19:09:05
517
原创 Linux进程sched类的优先级顺序
/* * The order of the sched class addresses are important, as they are * used to determine the order of the priority of each sched class in * relation to each other. */#define SCHED_DATA \ STRUCT_ALIGN(); \ __begin_sched_classes = .; \ *(...
2021-11-08 18:41:00
538
原创 内存池组件
内存池得四个问题:1 如何找到合适得分配位置2 连续得空闲内存块如何合并3 如何扩展内存池得内存大小4 大块与小块得分配策略是怎么样常见内存池:1 tcmalloc2 jmallocnginx 内存池1 不进行小块内存的释放,一个进程创建一个内存池,随着连接的持续,不会进行性内存的释放。...
2021-10-29 13:12:41
123
原创 KAFKA - ERROR Failed to write meta.properties due to (kafka.server.BrokerMetadataCheckpoint)
I set up Kafka source code read environment on Windows10, and encourted with error below, so what is wrong, I am a fresh man to learn kafka[2021-04-29 19:57:42,957] ERROR Failed to write meta.properties due to (kafka.server.BrokerMetadataCheckpoint)...
2021-10-22 16:47:29
4358
3
转载 WINDOWS上KAFKA运行环境安装
1. 安装JDK1.1 安装文件:http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载JDK1.2 安装完成后需要添加以下的环境变量(右键点击“我的电脑” -> "高级系统设置" -> "环境变量"):JAVA_HOME:C:\Program Files\Java\jdk1.8.0_171 (jdk的安装路径)Path: 在现有的值后面添加"; %JAVA_HOME%\bin"1.3 打开...
2021-10-22 16:41:24
211
原创 epoll水平出发何边沿触发
LT和ET模式epoll对文件描述符的操作有2种模式: LT和ETLT Level Trigger, 电平触发 默认 只有文件描述符号上有未处理的读写事件都会通知, 只要存在着事件就会不断的触发,直到处理完成ET Edge Trigger, 边沿触发 通过EPOLLET来设置 当且仅当读写事件到来时通知, 只触发一次相同事件或者说只在从非触发到触发两个状态转换的时候儿才触发LT(level triggered)是缺省的工作方式,并且同时支持block和no...
2021-09-10 07:23:13
127
原创 parseJson
import jsondef parseJson(strJson, keyList, valueList): print(strJson) # 传入参数校验 if not strJson or len(keyList) == 0: return [] for i in range(0, len(keyList)): try: val = strJson.get(keyList[i]) if.
2021-09-08 07:00:51
128
原创 leetcode647. 回文子串
#include <string>#include <iostream>class Solution {public: int countSubstrings(std::string s) { int ret = 0; if (s.empty() || s.length() <= 0) { return ret; } for (int i = 0;.
2021-08-29 08:42:18
60
原创 leetcode9. 回文数
#include <iostream>#include <string>#define _DEBUGclass Solution {public: bool isPalindrome(int x) { std::string strX = int2Str(x); return strIsPalindrome(strX); } // 整数转字符转 std::string int2Str(int x).
2021-08-29 08:40:48
87
原创 leetcode70假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
class Solution {public: int climbStairs(int n) { // 1 初始化数组 std::vector<int> f(n); // 2 定义边界条件 if (n == 1) { return 1; } if (n == 2) { return 2; }.
2021-08-27 07:15:08
348
原创 给定正整数N、M,均介于1~10 ^ 9之间,N <= M,找出两者之间(含N、M)的位数为偶数的数有多少个
/*******************************************************给定正整数N、M,均介于1~10 ^ 9之间,N <= M,找出两者之间(含N、M)的位数为偶数的数有多少个。测试用例:输入:N = 1, M = 100输出:90样例说明:[1, 100]区间上,有10~99元素的位数是2位,是偶数,这些整数的数量为90。输入:N = 1, M = 1000输出:91*********************************.
2021-08-27 06:38:05
507
原创 记录开发问题
场景:写代码中遇到一个问题:比如我们需要做一个登陆操作,然后在这个登陆操作之前要进行几次确认交互,几次交互都必须保证成功,我写的代码结构如下bool step1();bool step2();bool step3();bool step4();bool step5();bool step6();bool login(){ ret = step1(); if(!ret) { return ret; } ret = step2(
2021-07-14 06:36:47
127
原创 设计模式----策略模式
1.策略:针对某种问题给出的解决方案。2.场景:去上班交通工具选择策略:驾车,骑自行车,步行 三种不同策略,我们可以分别实现三种策略class 驾车{}class 骑行{}class 步行{}上述代码分别实现了三种策略,我们在客户端只需要根据自己的选择,选择一种策略即可。3.上述结构侧问题,我们之前在设计模式总体理解中有说过软件设计的需求会随着时间的推移而变化,假如我们在以后日子里要增加 爬行 的方式上班,这是应该怎么加?4.增加模块,这个问题设计模式总体理解
2021-07-09 06:37:16
74
原创 设计模式----模板方法
1 什么是模板方法? 模板方法即强调----模板,那么什么是模板,是指作图或设计方案的固定格式。方法就是一个动作,模板方法:就是一个或一套固定的流程或动作。void 早晨起床收拾(){ // step1 拉屎(); // step2 洗脸(); //step3 吃饭()}我们定义了一套起床流程 step1拉屎 step2洗脸 step3吃饭。在这个流程中我们必须找到变化点和稳定点: 稳定点:起床收拾的流程是稳定的 变化...
2021-07-08 06:00:07
140
原创 设计模式总体理解
1.怎样理解设计模式,设计的模式得功能是什么,我们为什么需要设计模式。2. 首先说下软件设计的一个硬性问题----随着时间推移需求在不断发生变化。3. 那么设计模式随之而生,设计模式得功能----抵御变化,或者说是封装变化。4. 那么为什么要封装变化,变化意味着要对已有的模块进行改动来适应,那么改动必将破坏一个 规则----复用。5. 什么是复用,编译过程中对已有并且已编译的模块不再进行二次编译,即原有的模块被复用, 那么对原有模块进行改动必将引起重新编译,也不符合增量编译...
2021-07-06 20:28:54
366
原创 结构化设计的概要与原理--模块化
技术一般 不会贴图 原谅!!!怎样做好软件开发过程中的模块化是一个值得思考的问题。在思考这个问题之前,我曾做了当前工作中的项目代码部分重构,我自己给自己定的重构原则是,按照职责单一来划分模块。在函数拆分中将功能能构独立出来的代码行拆分成一个函数封装成一个接口。在没有见到上图之前,我没有觉得自己哪里不对,但是上图引发了我的一个思考,我的拆分原则有没有问题,按照书面知识看似毫无破绽,面向对象的设计原则其中一条讲的就是单一职责原则。但是事务总是在带来好处的地方也带来负面效应,过度的拆分导致模块...
2021-07-05 22:10:19
534
原创 linux5.12.2系统调用表——fork
代码68行:57 common fork sys_forkunistd32.h对#define__SYSCALL(x,y)理解:#define__NR_fork2 //偏移量__SYSCALL(__NR_fork,sys_fork)===============================================================nolibc.hstatic__attribute__((unuse...
2021-07-05 19:46:45
332
转载 asmlinkage的理解
原文地址:https://blog.youkuaiyun.com/qq84395064/article/details/86593469?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162548345816780262543220%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162548345816780262543220&biz
2021-07-05 19:12:37
191
原创 linux5.12.2系统调用表
linux-5.12.2\tools\perf\arch\x86\entry\syscalls\syscall_64.tbl547个系统调用
2021-07-05 19:03:18
103
原创 Kernel configuration is invalid. include/linux/autoconf.h or include/config/auto.conf are missing
https://blog.youkuaiyun.com/yusiguyuan/article/details/11144941 //刚下载的linux源代码,一个简单的hello驱动都没有编译通过 //下面是驱动源代码 #include <linux/init.h> #include <linux/module.h> static int hello_init(void) { printk(KERN_...
2021-07-05 18:59:10
1174
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人