![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OS
文章平均质量分 87
belongAL
努力的阿鲤
展开
-
高质量c++/c编程指南—内存管理篇
以下是阿鲤对高质量c++/c编程指南的读书笔记及自己的理解,分享出来希望对大家有用。这里是第七章的内容:1:内存的分配方式。2:常见的内存错误及其对策。3:指针与数组的对比。4:指针参数是如何传递内存的?5:free和delete把指针怎么啦?6:动态内存会自带释放吗?7:杜绝“野指针”8:有了malloc/free为什么还要new/delete9:内存耗尽怎么...翻译 2020-03-06 12:32:48 · 238 阅读 · 0 评论 -
你知道为什么这段代码输出两个1吗?
首先给代码:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int main(){ long long a = 4294967297; printf("%d %d\n", a); system("pause"); return 0;}输出结果:解析:...原创 2019-11-20 09:54:43 · 131 阅读 · 0 评论 -
realloc函数+二级指针对改变函数内数组容量错误总结
阿鲤今天在vs中尝试在函数内改变数组的容量时,使用了二级指针;结果发生了错误,现在对错误做出总结,希望对大家有所帮助。首先上代码错误代码:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>void fun(int** arr){ (*arr)[0] = 1; (*...原创 2019-10-09 19:36:07 · 410 阅读 · 0 评论 -
两张图带你了解c/c++中的内存分布
一:说明:1. 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。(Linux课程如果没学到这块,现在只需要了解一下)3. 堆用于程序运行时动态内存分配,堆是可以上增长的。4. 数据段--存储全局数据和静态数据。5. 代码段--可执行的代码...原创 2019-10-05 08:55:46 · 201 阅读 · 0 评论 -
c/c++——内存管理
yy以下是阿鲤对c++中内存管理的总结,希望对大家有所帮助;若有误请慷慨指出。1. C/C++内存分布2. C++中动态内存管理3. operator new与operator delete函数4. new和delete的实现原理5. 定位new表达式(placement-new)1. C/C++内存分布在这里阿鲤直接给大家上一张图2. C++中动态内存管理...原创 2019-10-05 09:14:59 · 150 阅读 · 0 评论 -
怎样计算类,结构体中的偏移量
首先上代码:#include<iostream>using namespace std;class N{public: int i; char j; double k;};int main(){ cout << (size_t) &(((N*)0)->N::j) << endl; system("pause")...原创 2019-09-29 17:18:58 · 244 阅读 · 0 评论 -
栈区与栈的区别
栈区:程序运行时候分配的一块内存空间,取名为栈区;存放函数运行起来的一些信息栈:后进先出的数据结构原创 2019-09-16 20:02:25 · 451 阅读 · 0 评论 -
counst修饰的指针
const修饰指针式分别有以下三种情况;一:const位于*号左边,const修饰指针所指向的变量,即指针指向为常量,可以先不进行初始化;int b = 500;const int *a = &b;int const *a = &b;//指针所指向的内容为常量,内容不能被改变二:const 位于*号右边,const修饰指针本身,即指针本身是常量,定义时...原创 2019-09-08 23:23:35 · 799 阅读 · 0 评论 -
对‘0’ - 48 等于0的解释
首先请看一下ASCII表0011 0000 060 48 0x30 0 字符0 0011 0001 061 49 0x31 1 字符1 0011 0010 062 50 0x32 2 字符2 0011 0011 063 51 0x33 3 字符3 0011 ...原创 2019-08-31 14:26:12 · 1895 阅读 · 0 评论 -
程序员自我修养——连接,装载与库1.5-如何将计算机上有限的物理内存分配给多个程序使用
如何将计算机上有限的物理内存分配给多个程序使用假设计算机有128MB的内存,程序A需要10MB,程序B需要100MB,程序C需要20MB;如果需要同时运行A,B,那麽比较直接的做法就是把内存的前10MB给A,10-110给B;这样A,B就可以同时运行了;但这样的分配会有很多问题问题一:程序空间不隔离问题二:内存使用效率低问题三:程序运行地址不确定1: 首先介绍地址空间分为虚拟...原创 2019-08-26 21:05:03 · 154 阅读 · 0 评论 -
程序员自我修养——连接,装载与库1.1 - 1.4(操作系统做什么)
不让CPU打盹;设备驱动1:计算机设备核心:CPU,内存,I/O控制芯片2:早期计算机的CPU,I/O,内存通过I/O控制器连接在BUS(总线)上3:北桥与南桥,北桥高速,南桥低速;4:SMP与多核:SMP(对称多处理器),多个CPU的处理器;多核,把多处理器进行打包只保留核心,公用昂贵的缓存部件5:系统软件可分为两块,一是平台性的,比如操作系统内核,驱动程序,运行库等;二是程...原创 2019-08-25 21:55:17 · 126 阅读 · 0 评论 -
小端逆序大端
c语言编码,实现函数long htonl(long a),也就是将主机序转化为网络序网络序统一为大端。该算法主要需要测试主机序,如果是大端则不做任何的改变,如果是小端则逆序首先,请看代码;#include<stdio.h>#include<stdlib.h>int htonl_small(){ int a = 1; return *((char*)...原创 2019-08-25 15:26:39 · 227 阅读 · 0 评论 -
线程的介绍
1:什么是线程? 线程是程序执行流的最小单位;一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。多个线程便会组成一个进程;一个标准的线程与进程的关系如下;2:多线程的优点1:有效利用线程睡眠的时间(例如等待网络相应)2:有的操作会消耗大量时间,如果只有一个线程,人机交互会被中断;而多线程可以分别负责交互和计算3:程序逻辑本身要求并发操作4:多cpu...原创 2019-08-15 21:08:12 · 171 阅读 · 0 评论 -
数据的存储
阿鲤将以以下顺序位大家介绍数据的存储*数据类型详细介绍*整形在内存中存储:原码,反码,补码*大小端介绍及判断*浮点型在内存中的存储解析1:数据类型的介绍1.1:浮点数和整形家族(如表):整形 char short int long 浮点型 float double 1.2:构造类型数组类型 结构体...原创 2019-08-15 18:16:39 · 677 阅读 · 0 评论 -
程序的编译与连接
阿鲤今天向大家介绍的是程序的编译与链接(附思维导图)在这篇文章中阿鲤将以Linux环境为基准为大家演示程序的编译与链接过程:首先为大家附上一张思维导图,请大家跟着这张思维导图来阅读这篇文。(如果没有Linux请下载安装一个)思维导图链接一:创建main.c首先在linux环境中使用命令vim main.c写一个这样的程序#include<stdio.h>//BelongAl...原创 2019-07-25 09:22:34 · 451 阅读 · 0 评论 -
判断大小端
在计算机存储中有两种存储方式,分别为大端,小端;大端存储:高权重的存放在高地址小端存储:低权重的存放在高地址原创 2019-06-10 07:14:09 · 905 阅读 · 0 评论 -
一个逻辑图简单告诉你什么是MMU
MMU是Memory Management Unit的缩写,中文名是内存管理单元,有时称作分页内存管理单元(英语:paged memory management unit,缩写为PMMU)。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制,在较为简单的计算机体系结构中,负责总线的仲裁以及存储体......原创 2020-03-26 21:42:18 · 397 阅读 · 0 评论 -
五种IO模型的介绍(内附epoll服务器的简单实现)
以下是阿鲤对五种常用IO的总结,希望可以帮助到大家。一:同步异步&阻塞非阻塞二:五种IO模型三:fcntl函数四:select,poll,epoll原创 2020-06-20 20:51:01 · 355 阅读 · 0 评论 -
读者写者模型&读写锁的介绍及简单实现
在介绍读者写者模型之前,先介绍一下读写锁:读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读...原创 2020-03-12 18:07:18 · 371 阅读 · 0 评论 -
详解Linux下多线程
以下是阿鲤对Linux下线程的总结,希望对大家有所帮助;若有误请慷慨指出。1:线程概念2:线程控制2:线程安全注:以下的代码实现均为centos7环境;一:线程概念1:线程的介绍: 在传统操作系统中对程序的描述方式分为pcb和tcb即进程和线程;而在Linux下其进程和线程均是通过pcb进行描述的;pcb:是一个文件描述信息,其使用虚拟地...原创 2019-12-29 21:33:07 · 501 阅读 · 0 评论 -
Linux下的生产者与消费者模型
注:以下代码实现在centos7环境下一:生产者与消费者模型介绍消费者生产者模型是典型的多线程操作,具体介绍请看图文:如上图再生产者与消费者模型中,存在多个生产者与多个消费者;生产者王一个队列中生产产品,消费者再队列中消费产品;而且再生产时或消费时均有可能出现并行,所以这个队列必须是一个线程安全队列;二:模型的优点:1:解耦合,生产者模块与消费者模块并不直接交互,都仅操作...原创 2019-12-29 19:56:53 · 465 阅读 · 1 评论 -
详解linux下的进程信号
以下是阿鲤对Linux下进程信号的总结,希望对大家有所帮助;若有误请慷慨指出。在生活中我们处处离不开信号,很多东西都需要有信号来给我们传达信息。当我们听到上栗铃声我们就知道要上课了;当我们看到有人向我们挥手我们就知道他再向你打招呼;以上这些这些都是生活中信号的体现。那么什么是进程间信号呢?1:信号概念2:信号的种类3:信号的产生4:信号在进程中的注册和注销5:信号的捕捉处理...原创 2019-12-23 18:07:02 · 359 阅读 · 0 评论 -
core dumped——核心转储在调试中的使用方法
我们在Liunx环境中写代码时,有时候会碰到异常退出,而异常退出经常很难寻找,所以就出现了core dumped来保存异常退出信息,用于在调试中寻找错误信息。下面就是core dumped的使用方法;1:首先我们查看核心转储文件的大小;使用 ulimit -a选项我们会的发现core file size 为0,时系统默认2:设置core file size大小使用uli...原创 2019-12-23 10:31:30 · 696 阅读 · 0 评论 -
进程间通信(IPC)
因为每一个进程都要有一个独立的虚拟地址空间,在保证了进程的独立性同时,却使得进程间无法通信;所以必须要借助一定的方法进行进程间通信,阿鲤在这里主要介绍以下几种通信方式(以下均为SystemV标准)1:管道 -- 用于进程间的数据传输2:共享内存 -- 用于进程间的数据共享3:消息队列 -- 用于进程间的数据传输4:信号量 -- 用于实现进程间控制原创 2019-12-22 20:16:14 · 293 阅读 · 0 评论 -
Linux下的基础IO
一:标准库基础IO二:系统调用接口三:Linux对文件的管理方式四:软硬连接文件注:以下的代码实现均为centos7环境一:标准基础IO:一:首先向大家介绍的史<stdio>里面的函数三个标准输入函数1:printf():是对fprintf的封装 ,直接将stream封装成了s...原创 2019-12-22 12:08:33 · 337 阅读 · 0 评论 -
详解linux下的进程控制
以下是阿鲤对以下进程控制的总结,希望对大家有所帮助;若有误请慷慨指出。一:进程创建二:进程终止三:进程等待四:进程替换五:minshell注:以下的代码实现均为centos7环境一:进程创建进程创建的流程:创建一个pcb-> 复制父进程中的信息解析来图解程序创建的过程1:首先假设我们运行了一个test文件 ./test那么操作系统就会创建一个p...原创 2019-12-01 20:46:00 · 319 阅读 · 0 评论 -
Linux下的程序地址空间(进程地址空间-虚拟地址寻址原理)
以下是阿鲤对linux下的程序地址空间的总结,希望对部分同学能起到帮助;若有误请慷慨提出。在我们电脑上运行的每一个程序都会有一个自己的地址空间,请注意是运行起来的程序;所以真正占地址空间不是程序而是进程。那么进程的地址空间是怎样分配到呢?首先给大家一张图;上图是我们一个进程运行起来时地址空间的划分,那么这些地址空间都是怎样划分的呢?要知道每一个进程都会有一个自己的地址空间,...原创 2019-12-01 16:24:20 · 300 阅读 · 0 评论 -
Linux下的环境变量
1:什么是环境变量: 用于存储系统运行环境参数的变量2:环境变量的作用: 使系统的系统配置更加灵活3:环境变量的查看 env:查看所有的环境变量eg:我们可以看到里面有很多的路径(PATH),所以我们可以得到环境变量就是将一部分路径直接放到默认路径中,这样我们在使用还文件时就不用加路径了。就好像我们在linux中使用l...原创 2019-11-28 18:43:55 · 151 阅读 · 0 评论 -
详细介绍Linux系统中的进程
以下是阿鲤对Linux系统中进程的总结,希望对大家有所帮助,若有不足之处请慷慨提出。一:操作系统的介绍 1.1:操作系统的定位: 1.2:操作系统的管理方式:二:进程概念 2.1:进程是什么? 2.2:Linux下进程的查看 2.3:进程状态 2.4:进程创建 2....原创 2019-11-28 15:31:21 · 414 阅读 · 0 评论 -
基于linux下得c++程序的内存泄漏检查工具-valgrind
valgrind是一个强大的开源程序检测工具以下是以centos为运行环境的演示。第一步:安装sudo yum install valgrind第二步:演示首先我们写一段这样的代码2.1使用命令:g++ -g -o leak leak.c 生成Debug版本的目标文件2.2:使用命令valgrind --tool=memcheck --leak-c...原创 2019-11-02 13:43:48 · 210 阅读 · 0 评论 -
Win10下将用户文件夹名改为英文
1:在当前用户开始处-点击右键(Windows键+X)-关机或注销-注销。注意,开始菜单中的电源是无法进行注销操作的。2:切换到Administrator用户登录,若这里看不到Administrator用户,则参考:Windows10怎么用Administrator登录?3:登录后,点击任务栏上的“文件资源管理器”。4:进入C盘,即系统盘,用户文件夹所在位置。5:可看到中文用户的文件夹名,...原创 2019-07-28 16:40:41 · 1669 阅读 · 0 评论 -
make / makefile 解释规则
一:makefile格式:生成文件名:依赖文件列表 生成...原创 2019-09-16 18:52:58 · 174 阅读 · 0 评论 -
中断,异常,系统调用的处理过程
中断和异常在中断和异常之前,操作系统会生成一个表(为每一个异常,中断编号);处理过程分为硬件处理和软件处理,每个外设都有相对应的中断号,从而让操作系统和所识别;中断一:硬件(外设) 设置中断标记(CPU初始化)1:将内部外部事件设置中断标记2:找出中断事件ID,让操作系统识别二:软件(操作系统)1:保存当前处理状态2:中断服务程序处理3:清除中断标...原创 2019-09-05 08:37:02 · 1492 阅读 · 0 评论 -
操作系统的启动,中断,异常,系统调用
启动:DISK(硬盘):开机前,操作系统的存放位置;存放Bootloader。BIOS:基本I/O处理系统;开机时检查外设。Bootloader:加载OS,将OS放到操作系统上,使得CPU可以使用OS。CS:IP:段寄存器,指令寄存器;为BIOS开始提供初始地址。图:中断:异常:系统调用:在计算机运行中,内核是被信任的第三方,只有内核可以执行特权指令;这样...原创 2019-09-04 07:18:49 · 197 阅读 · 0 评论 -
Linux中的调试工具-gdb的使用总结
我们在写程序时往往不能一次写到位,而是需要不断的检查,最终才能有我们你想要的程序;而为了方便检查,就有人发明了调试工具;而我们今天要介绍的就是Linux中的调试工具—— gdb 刚接触gdb感觉这个调试工具真难用,即不方便又不直观,但是在接触一段时间并熟悉之后发现这东西还是不好用;(相比于集成开发软件);但是该学的还是要学呀;下面就是阿鲤对gdb的学习总结...原创 2019-09-02 17:21:19 · 167 阅读 · 0 评论 -
彩色进度条
注:此代码实在Linux环境下执行的;首先上代码:1 #include<stdio.h> 2 #include<unistd.h> 3 4 char str[100] = {'\0'}; 5 const char *lable="|/-\\"; 6 int main() 7 { 8 int i = 0; 9 for(i ...原创 2019-08-28 15:42:08 · 140 阅读 · 1 评论 -
被Git折磨的一天,git教程
之前在windows上安装git,就花费了好久,最后也是莫名奇妙的可以使用了(当时心想能传代码就可以了);但是!之后使用了Linux,windows上的git就不好用了,于是我又开始了Linux上git上的安装,可谓是大费一番功夫才可以成功的上传了代码。以下是我安装git时的一些命令;希望可以对未安装的同学有所帮助。注:我使用的centos1:首先判断你的Linux上有没有装git;使...原创 2019-08-28 07:18:08 · 153 阅读 · 0 评论 -
Linux权限及常用命令介绍
一:权限介绍1:Linux下有两种用户:超级用户(root),普通用户。1:超级用户可以在Linux下做任何事情,不受限制;2:普通用户会有所限制2:root和普通用户之间的切换指令:普通到超级:su root 和 su -超级用户到普通用户:su user 和 Ctrl+D3:我们通过指令 ll 即可看到文件的属性,请看下面,这是对Lin...原创 2019-08-27 08:48:14 · 310 阅读 · 0 评论 -
Linux常用命令集合一
01. ls 指令语法: ls [选项][目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件-k 以 k 字节...原创 2019-08-23 14:35:32 · 179 阅读 · 0 评论