10 2018 档案
摘要:一、强符号和弱符号 在C语言中,如果多个模块定义同名全局符号时,链接器认为函数和已初始化的全局变量(包括显示初始化为0)是强符号,未初始化的全局变量是弱符号。 根据这个定义,Linux链接器使用下面的规则来处理多重定义的符号名: 1.不允许有多个同名的强符号 2.如果有一个强符号和多个弱符号同名,那
阅读全文
摘要:前言 在 HAL 库中,很多回调函数前面使用__weak 修饰符。 weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为“弱函数”。 加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数
阅读全文
摘要:利用一个数组,记录每个字符串的个数,另一个flag数组标记已经计数过的字符串
阅读全文
摘要:在设计函数过程中,想要函数参数传入一个指针数组,多为字符串数组,在函数形参的设计上有两种思路,具体以下列两种应用场景为说明 一、字符串处理函数strsort 从程序设计角度来看,将多个字符串传递给函数处理时,因为传递的是一维数组,形参的定义比较简单。例如,函数strsort()可对多个字符串进行排序
阅读全文
摘要:之前遇到一个问题,信号量和互斥锁的区别是什么。一时忘了思考,今天才想到这个问题,翻阅知乎和stackoverflow,理解了之后做简单整理 一、定义 mutex,互斥锁,用于序列化对一部分可重入代码的访问,这些代码不能由多个线程同时执行 semaphore,信号量,将共享资源的并发用户数限制为最大数
阅读全文
摘要:GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径。 1.include头文件路径 除了默认的/usr/include, /usr/local/include等include路径外,还可以通过设置环境变量来添加系统include的路径: C语言环境下环境变量
阅读全文
摘要:在Linux中,轻量级进程可以是进程,也可以是线程。我们所说的线程,在Linux中,其实是轻量级进程之间共享代码段,文件描述符,信号处理,全局变量时; 如果不共享,就是我们所说的进程。 进程是资源管理的最小单位,线程是程序执行的最小单位。在操作系统设计上,从进程演化出线程,最主要的目的就是减小多进程
阅读全文
摘要:在linux系统中,许多进程在诞生之初都与其父进程共同用一个存储空间。但是子进程又可以建立自己的存储空间,并与父进程“分道扬镳”,成为与父进程一样真正意义上的进程。 linux系统运行的第一个进程是在初始化阶段“捏造出来的”。而此后的线程或进程都是由一个已存在的进程像细胞分裂一样通过系统调用复制出来
阅读全文
摘要:二、进程的生命周期 进程是一个动态的实体,所以他是有生命的。从创建到消亡,是一个进程的整个生命周期。在这个周期中,进程可能会经历各种不同的状态。一般来说,所有进程都要经历以下的3个状态: 在Linux系统中,将各种状态进行了重新组织,由此得到了Linux进程的几个状态: RUNNING:正在运行或者
阅读全文
摘要:一、进程和线程的概念 1.进程和线程的定义 进程并不只是一段可以运行的代码,也包含了运行代码所需要的资源。 在操作系统来看,进程是资源管理的最小单元,而我们又知道,线程是程序执行的最小单元。 话说回来,Linux系统至少有一个进程,一个程序可以对应多个进程,一个进程只能对应一个程序,一个进程包含一个
阅读全文
摘要:1. #error 的用法 (1)#error 是一种预编译器指示字,用于生成一个编译错误消息 (2)用法:#error message //注意:message 不需要用双引号包围 (3)#error 编译指示字用于自定义程序员特有的编译错误消息。类似的,#warning 用于生成编译警告消息 (
阅读全文
摘要:在Visual Studio2008中编写如下代码: 编译器会对 cout << MODI + 1 << endl;这行语句报错。 原因就是#undef起的作用: 当用完一个宏,比如MODI,不希望下面的代码再用到这个MODI,,那么就可以#undef它,那么下面如果再用到了MODI这个宏,编译器就
阅读全文
摘要:一、 Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源
阅读全文
摘要:今天看到一个比较有趣的题目,如下代码,分析输出结果 起初我认为,在C语言中,这样的操作时改变了y的地址,但是它的值并没有改变,所以执行main函数后,y的值不变,还是3 经过测试之后发现,这样的代码编译都无法通过,突然恍然大悟,这是c++中的引用,很久没有用c++,居然连这都忘记了。。。 切入主题,
阅读全文
摘要:大端模式(big endian)和小端模式(little endian)。 在我们发送数据的时候,我们首先要确定是大端还是小端模式来进行的,在接收方接收的数据必须知道数据是大端还是小端模式,才能正确地读取和存储数据起来,否则就会出错。 一个32位的二进制在内存中的存储时有2中分布方式:高字节对应高字
阅读全文
浙公网安备 33010602011771号