- 博客(62)
- 资源 (3)
- 问答 (6)
- 收藏
- 关注
原创 关于stack(栈)操作的博客
阅读经典——《深入理解计算机系统》04https://www.jianshu.com/p/ea9fc7d2393dC函数调用过程原理及函数栈帧分析https://segmentfault.com/a/1190000007977460c语言函数调用过程中栈的工作原理理解https://blog.csdn.net/qq_31567335/article/details/847822...
2020-03-23 00:21:41
372
转载 Linux中likely 函数的使用分析
http://blog.chinaunix.net/uid-20788636-id-3419057.html if(likely(value)){}else{}简单从表面上看if(likely(value)) == if(value),if(unlikely(value)) == if(value)。也就是likely和unlikely是一样的,但是实际上执行是不同的,...
2019-02-23 16:22:38
441
转载 dev_queue_xmi函数详解
http://blog.chinaunix.net/uid-20788636-id-3181312.html前面在分析IPv6的数据流程时,当所有的信息都准备好了之后,例如,出口设备,下一跳的地址,以及链路层地址。就会调用dev.c文件中的dev_queue_xmin函数,该函数是设备驱动程序执行传输的接口。也就是所有的数据包在填充完成后,最终发送数据时,都会调用该函数。 Dev_...
2019-02-23 16:19:12
212
转载 宏的本质以及宏(包括函数式宏) 没有返回值概念
由什么问题而引申的:字符串“XX\\ENM\\USB”中的XX是会变的,想写一个宏定义来表示该字符串。首先,想到用#define STR(x) x"\\ENM\\USB”形式,发现不行而引申出下文第一点。接着,想宏定义是否有返回值来表示而引申出下文第二点。最后,想到用#define STR(x) strcat(x,"\\ENM\\USB”)形式(这里,宏仍然只是源代码文本替换,...
2019-02-23 15:02:44
675
原创 Linux网络相关
Queueing in the Linux Network Stackhttps://www.linuxjournal.com/content/queueing-linux-network-stack讲述Linux网络 以及队列的英文文档 SKB:http://vger.kernel.org/~davem/skb.html Circular buffer 有动态示...
2019-01-25 22:58:25
188
转载 程序员必读书单 1.0
原文地址:http://lucida.me/blog/developer-reading-list/#mastery本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读。旨在成为最好最全面的程序员必读书单。前言Reading makes a full man; conference a ready man; and...
2018-10-26 18:25:52
300
转载 从cpu和内存来理解为什么数组比链表查询快
一个常见的编程问题: 遍历同样大小的数组和链表, 哪个比较快? 如果按照大学教科书上的算法分析方法,你会得出结论,这2者一样快, 因为时间复杂度都是 O(n)。 但是在实践中, 这2者却有极大的差异。 通过下面的分析你会发现, 其实数组比链表要快很多。 首先介绍一个概念:memory hierarchy (存储层次结构),电脑中存在多种不同的存储器,如下表CPU 寄存器 – immediate...
2018-04-24 10:55:47
554
转载 深入理解Linux内存管理-之-目录导航
转自:https://blog.csdn.net/gatieme/article/details/52384965日期内核版本架构作者GitHubCSDN2016-08-31Linux-4.7X86 & armgatiemeLinuxDeviceDriversLinux内存管理1 内存描述CSDNGitHubLinux内存描述之概述–Linux内存管理(一)01-description/0...
2018-04-20 17:47:54
409
转载 剑指Offer--题集目录索引
转自:https://blog.csdn.net/gatieme/article/details/51916802牛客OJ九度OJCSDN题解GitHub代码牛客剑指Offer题目列表九度OJ剑指Offer题目列表剑指OfferCodingInterviews–剑指Offer–名企面试官精讲典型编程题牛客OJ九度OJCSDN题解GitHub代码003–二维数组中的查找1384-二维数组中的查找剑指...
2018-04-20 17:46:58
290
转载 详解大端模式和小端模式(转)
一、大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必
2017-12-09 20:13:26
363
转载 C语言字符数组的初始化
1、字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。[cpp] view plain copychar str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'}; 即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数
2017-12-05 21:49:27
622
转载 字符串数组初始化相关问题总结
C字符串数组初始化相关问题总结在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串。总结起来有以下三种方式:(1) char str[10]="";(2) char str[10]={'\0'};(3) char str[10]; str[0]='\0';第(1)(2)种方式是将str数组的所有元素都初始化为'\0',而第(3)种方式是只将str数组
2017-12-05 21:04:00
1111
转载 字符串数组初始化相关问题总结
C字符串数组初始化相关问题总结在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串。总结起来有以下三种方式:(1) char str[10]="";(2) char str[10]={'\0'};(3) char str[10]; str[0]='\0';第(1)(2)种方式是将str数组的所有元素都初始化为'\0',而第(3)种方式是只将str数组
2017-12-05 20:58:25
1409
转载 32位平台代码向64位平台移植
1背景描述 从苹果A7处理器开始,就支持着两种不同的指令集:第一种为原有处理器所支持的32-bit ARM指令集,第二种为崭新的64-bit ARM体系结构。这种64-bit体系结构拥有更大的地址空间,最大支持16GB内存,同时它一次性可提取64位数据,比32-bit体系提高了一倍。现如今,苹果的LLVM编译器已经能够充分支持64-bit指令集。 正如苹果A7处理器一样,支持6
2017-12-05 12:50:30
712
转载 64位系统代码移植面临的20个问题(一)
64位系统代码移植面临的20个问题(一)原文地址:http://www.viva64.com/en/a/0004/摘要当从32位平台向64位平台进行代码移植的时候,程序发生错误是可以被观察到(observed)的。文章中给出了错误代码示例以及纠正的方法。并且列出了诊断错误的代码分析方法。这篇文章包含了各种64位错误的例子。但是,自从我们开始写这边文章后,我们已经
2017-12-05 12:48:46
602
转载 32位与64位编程注意事项总结
http://www.oschina.net/p/flowvisor http://www.cnblogs.com/centimeter/articles/2395405.html http://www.360doc.com/content/13/0520/21/7662927_286868466.shtml http://zhidao.baidu.com/link?url
2017-12-05 12:45:33
5551
转载 轻松记住大端小端的含义(附对大端和小端的解释)
或许你曾经仔细了解过什么是大端小端,也动手编写了测试手头上的机器上是大端还是小端的程序,甚至还编写了大端小端转换程序;但过了一段时间之后,当你再看到大端和小端这两个字眼,你的脑中很快浮起了自己曾经做过的工作,却总是想不起究竟哪种是大端、哪种是小端,然后又去查以前写的记录?更让人不快的是,这种经历反反复复,让你十分困扰。如果你和以前的笔者一样,有过这种不快的经历,那么这篇文章希望能帮你彻底解决这个苦
2017-12-05 12:27:03
775
转载 大小端模式,栈的生长方向和内存的存放方向
[cpp] view plain copy /* 栈的生长方向和内存的存放方向 栈的开口向下,高地址在上,低地址在下 内存的存放方向:自下向上 大端模式下:栈的高地址对应数据的低位 小端模式下:栈的高地址对应于数据的高位 */ #define _CRT_SECURE_NO_WARNINGS #include #include #include //1. 栈的生长
2017-12-05 11:37:47
644
1
转载 CSDN优秀博客连接,博客之星连接
http://blog.csdn.net/china_wanglong/article/details/202936872013年度CSDN十大博客之星TOP作者专注领域博客地址1邹晓艺机器学习及算法zouxy09
2017-12-05 11:11:04
475
转载 全网优秀IT博客导航
转自:@ http://blog.csdn.net/gatiemehttp://blog.csdn.net/gatieme/article/details/506589021 博客导航1.1 linuxlinux全线教程–提供了linux教程,服务器管理教程,BSD教程,还有编程语言(C/Java/Python/Perl),以及网络等全栈学习教程1.2
2017-12-05 11:09:16
276
转载 ssprintf sscanf atoi itoa 整数字符串转换
1、前言 我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来。从给定的字符串中提取相关内容,例如给定一个地址:http://www.bokeyuan.cn:2345,我们要从地址中提出协议,主机地址和端口号。之前对字符串和数字之间的关系不是很熟悉,工作中经常涉及到这个,如是好好总结一下。C语言提供了一些列的格式化输入输出
2017-12-03 00:54:05
338
转载 华为--嵌入式软件工程师面试题汇总
1)什么是预编译,何时需要预编译:答案:1、总是使用不经常改动的大型代码体。2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。 预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。(2)char * constp char const * p
2017-12-03 00:27:42
792
转载 嵌入式软件工程师经典笔试题
> 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因
2017-12-03 00:26:29
401
转载 嵌入式软件工程师经典面试题
1、int a[10]={1,2,3,4,5,6,7,8,9,0}; int *p=&a[1]; 则p[6]等于82、整数数组清零:bzero(),memset()。3、siezof();测试变量所占地址的字节数4、 main() { char *str[]={"ab","cd","ef","gh","ij","kl"}; char *t;
2017-12-02 23:58:59
829
转载 C语言字符串操作总结大全
1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串strncmp(p, p1, n) 比较指定长
2017-12-02 23:54:55
318
转载 C语言字符串处理函数
函数名: strcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include #include int main(void) { char string[10]; char *str1 = "abcdefghi"; stpcpy(s
2017-12-02 23:16:45
199
转载 C语言中内存分配
在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的。因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题。第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别。第2节主要介绍C语言中内存分配及释放函数、函数的功能,以及如何调用这些函数申请
2017-12-02 20:03:25
290
原创 编写安全无错C代码
1、不要用memcmp比较结构体例如定义如下结构体:typedef struct test{short m1;int m2;}TEST;int main(){ TEST a = {.m1 = 0, .m2 = 0,};TEST b;memset(&b, 0 , sizeof(TEST));if (0 == memcm
2017-11-29 21:50:51
265
转载 高性能IO模型浅析
服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(Blocking IO):即传统的IO模型。(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。(3)IO多路复用(IO Multiplexing):即经
2017-10-08 23:48:36
243
转载 Linux内存管理原理
转自:http://www.cnblogs.com/zhaoyl/p/3695517.html本文以32位机器为准,串讲一些内存管理的知识点。 1. 虚拟地址、物理地址、逻辑地址、线性地址 虚拟地址又叫线性地址。linux没有采用分段机制,所以逻辑地址和虚拟地址(线性地址)(在用户态,内核态逻辑地址专指下文说的线性偏移前的地址)是一个概念。物理地址自不必提。内核的虚
2017-10-08 23:24:46
351
转载 socket编程之select
server端:/*select实现单线程多用户使用select函数可以以非阻塞的方式和多个socket通信。程序只是演示select函数的使用,功能非常简单,即使某个连接关闭以后也不会修改当前连接数,连接数达到最大值后会终止程序。1. 程序使用了一个数组fd_A,通信开始后把需要通信的多个socket描述符都放入此数组。2. 首先生成一个叫sock_fd的sock
2017-10-08 22:15:41
591
转载 用户空间和内核空间通讯之【Netlink 】
用户空间和内核空间通讯之【Netlink 上】 Alan Cox在内核1.3版本的开发阶段最先引入了Netlink,刚开始时Netlink是以字符驱动接口的方式提供内核与用户空间的双向数据通信;随后,在2.1内核开发过程中,Alexey Kuznetsov将Netlink改写成一个更加灵活、且易于扩展的基于消息通信接口,并将其应用到高级路由子系统的基础框架里。自那时起,Netlink
2017-10-08 21:53:25
602
转载 linux操作系统及内核简介
一、操作系统概述在Richard Stevens的unix环境高级编程中这样定义“它控制计算机硬件资源,提供程序运行环境。一般而言我们称这种软件为内核(kernel),它相对较小,位于环境的中心”。总结下就是控制硬件,提供环境。程序员主要关心的是所谓的环境,主要说下提供什么环境。操作系统都会想它们运行的程序提供各种服务,执行新的程序,打开文件,读文件,分配存储空间,获得当前时间等(
2017-10-08 17:17:37
3600
转载 Linux学习经典书籍
C语言经典著作导读:4.《C语言大全第四版》作者: 赫伯特・希尔特译者: 王子恢 戴健鹏 等出版社: 电子工业出版社出版年: 2001-9-1页数: 560定价: 48.00装帧: 平装(无盘)ISBN: 9787505369153 说明:这本完全适合零基础的,另外这本书买不到了,虽然计算机更新换代很快,但是C永远不会淘汰
2017-10-03 23:03:48
421
转载 C语言函数指针基础
本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础。如果你不讨厌事无巨细,请尽情阅读吧。函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具。本文将从C语言函数指针的基础开始介绍,再结合一些简单的用法和关于函数名称和地址的趣闻。在最后,本文给出一种简单的方式来看待函数指针,让你对其用法有一个更清晰的理解。 函数指针和一个简单的函
2017-10-03 22:56:19
231
转载 UNIX环境高级编程笔记之进程
UNIX环境高级编程笔记之进程控制本章讲的都是一些非常基础的知识,目的是为了下一章讲进程控制做铺垫,所以,本章就不做过多的总结了,直接看图吧。UNIX环境高级编程笔记之进程控制本章重点介绍了进程控制的几个函数:fork、exec族、_exit、wait和waitpid等,主要需要掌握的是父进程和子进程之间的运行机制,怎么处理进程的正常和异
2017-09-28 21:29:58
319
转载 UNIX环境高级编程笔记之线程
本章涉及到线程的一些基本知识点,讨论了现有的创建线程和销毁线程的POSIX.1原语,此外,重点介绍了线程同步问题,讨论了三种基本的同步机制:互斥量、读写锁、条件变量。
2017-09-28 21:28:48
321
转载 UNIX环境高级编程笔记之高级I/O
UNIX环境高级编程笔记之高级I/O本章说明了很多高级I/O功能:非阻塞I/O——发一个I/O操作,不使其阻塞,记录锁,STREAMS机制I/O多路转接——select和poll函数readv和writev函数,以及存储映射I/O(mmap函数)UNIX环境高级编程笔记之标准I/O库一、总结 文件I/O一章讲了不带缓冲的I/
2017-09-28 21:25:46
575
转载 Linux探秘之I/O效率
一、文章来由 最近看了《UNIX环境高级编程》,对以前比较模糊的一些知识结构又做了进一步的加强,特别是前两章讲到不带缓冲的文件I/O和带缓冲的标准I/O,对read、write、fread、fwrite、printf等等这些函数又有了新的认识。一个很大的感受是我们很多时候编程开发都只注重上层逻辑,虽然一个项目接一下项目,看上去做了不少事,但是夜深人静时仔细一想,究竟我们是否真正掌握了这些知识
2017-09-28 21:24:30
393
ip分片后会再次分片吗?
2015-10-18
设计tftp服务器和客户端
2015-07-16
linux 编程 统计UDP报文
2015-07-04
linux编程 监听指定端口的ip报文 并判断报文的大小
2015-07-04
linux IP报文 文件编程
2015-07-03
关于操作系统多线程编程
2015-07-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人