
编程基础
文章平均质量分 66
Lamar Davis
Hello world, I'm stupid and I'm a SB.
展开
-
armv7指令集 C函数调用 堆栈指针SP的变化
首先说明一下,arm中函数调用不同的编译器可能差别很大,即使都是arm-linux的交叉编译器,也有差别,有的编译器把r7寄存器作为栈帧寄存器(fp),有的把r11寄存器作为栈帧指针(fp),例如arm-linux-gnueabihf-gcc用的r7和arm-linux-gnueabi-gcc用的r11,另外在函数执行开头的处理也不一样1. arm-linux-gnueabihf-gcc编译器先给函数中变量分配栈空间,然后放fp和sp指向栈顶2. arm-linux-gnueabi-gcc编译器先让原创 2020-06-30 23:11:54 · 3452 阅读 · 2 评论 -
函数调用,中断以及进程切换,的现场保护的区别
首先,函数调用是预料范围内的代码执行,是完全可控的,当前执行的函数调用另外一个函数时,是从当前代码段通过跳转指令主动跳转到另外一个代码段,只需保存跳转之前的栈顶指针(fp),栈底指针(sp)到栈空间,保存跳转指令的下一条指令的地址到lr寄存器,无须保存所有寄存器的值(如果C函数有使用R4-R11寄存器,还是要保存一下滴,这个C编译器会帮我们完成,无需担心,下面会详细说明),然后还要使用寄存器r0-...原创 2019-10-07 22:35:31 · 8573 阅读 · 7 评论 -
面试题【1】:i++是否原子操作?并解释为什么?
转载自:https://blog.youkuaiyun.com/YEYUANGEN/article/details/19612795不是原子操作。理由:1.i++分为三个阶段:内存到寄存器寄存器自增写回内存这三个阶段中间都可以被中断分离开.2.++i首先要看编译器是怎么编译的,某些编译器比如VC在非优化版本中会编译为以下汇编代码:__asm{moveax,...转载 2019-08-16 10:06:01 · 713 阅读 · 0 评论 -
生产者与消费者model
生产者消费者模型 使用信号量和互斥锁能够较好地实现Semaphore mutex = 1; //缓存区互斥操作的互斥信号量Semaphore empty = n; //空缓冲区数目Semaphore full = 0; //满缓冲区数目item buffer[n];int in = 0, out = 0;producer(){//生产者进程 while(1){ ...原创 2019-08-19 19:01:26 · 226 阅读 · 0 评论 -
makefile--函数定义 函数调用
函数定义与调用转载自:https://www.jianshu.com/p/e2c78c8fb4a51. makefile中支持函数的概念make解释器提供了一系列的函数供makefile调用 在makefile中支持自定义函数实现,并调用执行 通过define关键字实现自定义函数示例1--函数定义define func1 @echo "my name is $(0)"...转载 2019-04-26 20:53:37 · 873 阅读 · 0 评论 -
git pull --rebase
转载自:https://www.jianshu.com/p/dc367c8dca8e1.git pullgit pull = git fetch + git merge FETCH_HEAD git pull --rebase = git fetch + git rebase FETCH_HEAD 2.merge 和 rebase现在我们有这样的两个分支,test和mast...转载 2019-04-07 21:17:59 · 769 阅读 · 0 评论 -
海明校验码
以最多只有一位出错为前提进行说明1.校验位的位数的确定:数据位为n位,校验位有k位,传输过程中最多只有1位出错,所以出错的情况总共n+k种,正确的情况有1种,所以校验位要能表示所有的情况即 2^k >= n + k + 12.海明校验码的规则: a.如果...原创 2018-08-14 19:28:05 · 2475 阅读 · 0 评论 -
编码 字符集 简介
编码一直是让新手头疼的问题,特别是 GBK、GB2312、UTF-8 这三个比较常见的网页编码的区别,更是让许多新手晕头转向,怎么解释也解释不清楚。但是编码又是那么重要,特别在网页这一块。如果你打出来的不是乱码,而网页中出现了乱码,绝大部分原因就出在了编码上了。此外除了乱码之外,还会出现一些其他问题(例如:IE6 的 CSS 加载问题)等等。我写本文的目的,就是要彻底解释清楚这个编码问题!如果你遇...转载 2018-06-28 21:17:13 · 245 阅读 · 0 评论 -
浅谈C/C++编程中的字符编码转换
浅谈C/C++编程中的字符编码转换转载自:https://blog.youkuaiyun.com/benkaoya/article/details/59522148 背景在写跨平台的C/C++代码过程中(本文的研究只限于C/C++范畴),经常会遇到中文字符串乱码的问题。比如,同一个源码,用MSVC编译...转载 2018-06-23 12:48:07 · 1274 阅读 · 0 评论 -
vim部分命令
Vim三种模式命令模式,插入模式,底行模式进入vim的方式为 vim [] [] [] 其中[]为文件名,支持同时打开多个文件在底行模式中输入指令: :N 向上切换文件 :n 向下切换文件进入vim默认为命令模式,按下i、o、a键切换到插入模式,区别自己试插入模式...原创 2018-05-05 14:12:47 · 327 阅读 · 0 评论 -
ssh 秘钥登录
ssh-keygen –t rsa –f [filepath/filename] –C “xxx”此命令用于生成一对秘钥,-C后面的参数用于对生成的秘钥做一个注释,可以省略这个参数(省略后此命令默认使用执行这行命令的linux的用户名@计算机名作为注释,另外,使用xshell生成的秘钥默认都没有这个选项,需要自己在秘钥最后手动输入注释),例如生成用于github上的公钥时,我们可...原创 2018-04-03 15:04:55 · 6500 阅读 · 0 评论 -
ubuntu中的update-alternatives命令
ubuntu中的update-alternatives命令update-alternatives --install link name path priority用法举例:update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10在/usr/bin目录下建立建立一个名称为gcc的软连接,指向/etc/alternatives/...原创 2018-04-09 15:44:43 · 1024 阅读 · 0 评论 -
git和github用户名 邮箱
git和github用户名 邮箱git客户端用户名、邮箱的作用本地的git需要设置用户名和邮箱,其本质是本地git客户端的一个变量,不随git库改变,但也可以为某个库单独设置用户名和邮箱,github或码云等都是根据git客户端的用户名和邮箱来进行contributions统计的,每次commit的记录也是使用git客户端的用户名和邮箱,所以当客户端邮箱、用户名和github邮箱、用户名不一致时,...原创 2018-03-30 13:51:02 · 8500 阅读 · 0 评论