自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 end() 与 back()

vector::end( )返回的是vector最后一个元素后的”结束元素“vector::back( )返回的是vector最后一个元素类比字符串,end( )返回的是’\0’,back( )返回的是字符串的最后一个字符

2024-04-29 16:27:42 124

原创 套接字概念的理解

套接字(Socket)是网络编程中的一个基本概念,它提供了一种机制,使得一台计算机上的应用程序能够与另一台计算机上的应用程序进行通信。在网络通信中,套接字充当了通信端点的角色,它使得不同主机之间的进程能够通过网络进行数据交换。

2024-04-29 16:26:42 267

原创 在线程临界区里面,线程可以被切换吗

2.在当前有锁线程被切出去的时候,任何线城不能进入临界区访问临界资源。这个对于其他线程来说,当前线程访问临界区的过程就是原子的。只有两种情况其他线程才关注,该线程加锁,或者没加锁,1.在线程临界区里面,线程也可以被切换。

2024-04-18 17:35:24 85

原创 对一个全局变量进行多线程并发 -- 或者 ++ 操作是否是安全的??是否是原子的??

第一次判断时候进来是1,返回到内存中也是1,第一次的减减的时候,返回到内存的是0。第二次判断的时候进来的时候虽然也是1,但是减减的时候会重新从内存中读取数据,此时内存中的数据是0,减减操作会使其成为负数。此时从内存中加载到cpu的从100减到了99,线程1把此时cpu中的99拿到自己的tcb中,当做。上下文(99)加载到了cpu里,最后把值(99)返回到了内存中.原来的数据是100,线程操作内容是--,线程1是只--了一次,线程1此时顶了回来,恢复了上下文(99),把自己的。cpu将全局变量进行减减操作,

2024-04-18 17:34:09 242

原创 .锁申请不成功,代码不能执行(阻塞等待)的原理

cpu把线程tcb放入waiting队列中进行等待,并且将tcb中R状态设置成为非R状态。

2024-04-14 19:44:59 288

原创 死锁的理解及其解决方法

是指再中的均占有,但因所而处于一种。

2024-04-14 19:44:17 425

原创 为什么c++的多线程具有跨平台性

各种语言都会有线程,他们的底层都会调用原生线程库,linux下会调用Linux下的原生线程库,window下也会调用window下的原生线程库。而不同操作系统下的多线程,只有一个它的原生线程库可以使用。(即linux下只有它的多线程库,而没有windows下的线程库)语言程度的线程库都是基于操作系统的线程库的,在不同的操作系统下,一般语言的线程都能够运行,即叫做跨平台性。不同的操作系统有不同的线程库,我们称之为“

2024-04-09 20:54:32 115

原创 锁的本质理解

芯片里有指令集,是cpu认识汇编语言的基础,锁本身就是共享资源,申请锁和释放锁本身就是原子的。是判断是否申请锁成功,如果成功,则返回,不成功,则挂起等待。将一个变量 mutex 和 al(寄存器)进行交换。将cpu中的al(寄存器)设置为0。加锁原理:(加锁汇编)

2024-04-09 20:54:01 276

原创 按位或 和 按位与 按位取反 的 应用理解

按位与 可以理解为 “消除操作”: 有0的位置全部变成0。按位或 可以理解为 “增加操作” :有1的位置全部变成1。按位取反 可以理解为 “相反操作” :0变1 1 变0。

2024-04-07 18:50:08 88

原创 线程为什么比进程更加轻量化???(cache寄存器)

创建释放创建。

2024-04-07 18:49:33 153

原创 perror

1.perror里面设置成为Error。2.perror里面写成1。

2024-04-05 22:54:10 112

原创 页表的理解(虚拟地址如何找到物理内存)

10个bit位满地址也只有2^10(1024)个,一个地址大小为4字节,这一个页目录大小是4kb。一个地址在32位机器下大小是4字节,2个地址就是8字节 + 存储权限,我们假设一行页表项大小是。物理内存里面的基本单元是页框(4kb),一个页框中有很多数据,要访问其中之一的话就需要。第二部分同理也开辟一个二级页目录,大小同样是4kb。第一部分:10个bit位,第二部分:10个bit位,第3部分:12个bit位。站在设计者的角度看,页表中存有两个地址,一个。,剩下的12个bit位刚好可以“

2024-04-05 22:53:28 582 1

原创 执行流的理解

我们首先来介绍一下执行流的概念,执行流就是一段逻辑上独立的指令区域,对应于代码,大到可以是整个程序文件,即进程,小到可以是一个功能独立的代码块,即函数,而线程本质上就是函数。执行流是独立的,其独立性体现在每个执行流都有自己的栈、一套自己的寄存器映像和内存资源,其实这就是执行流的上下文环境。因此,我们要想构造一个执行流,就要为其提供一整套的资源。

2024-04-02 20:55:48 377 2

原创 为什么永远不能对空指针解引用

因为空指针实际上并没有指向任何有效的内存地址,对空指针进行解引用会导致访问无效的内存地址,这将导致程序崩溃或产生未定义的行为。因此,必须在对指针进行解引用之前检查指针是否为空,以避免出现错误。一个空指针我们也无法对它进行取内容操作,这是初学者很容易犯得一个错误,空指针只有在真正指向了一块有意义的内存后,我们才能对它取内容。

2024-04-02 20:55:21 89 1

原创 子进程继承父进程的fd

第二次fork(),父进程又打开2号文件w2,但是第二个fork()后的子进程的1号文件指向父进程第一次打开的w1文件(是同一个文件),这个fork()的子进程打开他的0号文件(r2)第三次fork(),父进程打开3号文件(w3),这个子进程打开0号文件(r3),但是子进程的1号文件指向第一次打开的w1的文件,他的二号文件指向第二次fork()时,打开的w2文件。第一次fork(),父进程打开1号文件,w1文件,这个子进程打开0号文件,r1文件。父进程打开文件后,子进程会继承其打开的fd。

2024-03-31 21:08:08 213 1

原创 进程在运行是不是直接将pcb(内核数据结构)加载到cpu中呢?进程是怎样运行的呢?

进程控制块(PCB)不是直接加载到CPU中执行的,而是作为进程的描述信息存储在内存中。每个进程都有一个对应的PCB,PCB中包含了进程的基本信息和控制信息,例如进程ID、进程状态、程序计数器、寄存器值、内存使用情况、文件描述符等。当操作系统决定要执行某个进程时,它会根据PCB中的信息将进程加载到CPU中执行。操作系统会根据进程的优先级、调度算法等决定将哪个进程加载到CPU中执行,然后将该进程的PCB中的信息传递给CPU。CPU会根据PCB中的指令和数据执行相应的操作。

2024-03-31 21:06:37 324 1

原创 错误码,退出码的理解

错误码和退出码是在同一个数组中strerror[]中,只是它们因为应用的场景不同,而有不同的名字,这些都是人为的,只是为了获取信息而已,错误码是为了获取异常编译的信息,而退出码是正常编译后,为了获取退出信息。

2024-03-14 14:55:09 122

原创 delete与野指针,空指针 理解

C++在使用 delete 或 delete[] 后,指针本身不会变为 nullptr,它仍然保留之前的值。这样,如果后续再使用 ptr,就会触发空指针异常,而不是访问已释放的内存造成未定义行为。为了避免悬挂指针(dangling pointers)的问题,建议在释放内存后将指针设置为 nullptr,这样可以避免意外地访问已释放的内存。其实它们只是把指针所指的内存给释放掉,但并。如果不置空,下次开房是还是这个房间,(即访问的是已经释放的内存)释放后的指针应立即将指针置为NULL,防止产生“野指针”。

2024-03-14 14:48:52 277

原创 你真的懂linux吗??fork()与缓冲区

你真的懂linux吗?(红色是运行结果,蓝色是代码,欢迎大佬来教学,请在评论区开始你的表演)

2023-12-17 21:17:30 391 1

原创 秒懂数据结构—二叉树2(顺序结构实现二叉树)

了解了关于二叉树的概念,接下来我们使用顺序结构来实现二叉树吧如果没有了解二叉树概念,那先了解一下哦看看上一章吧T* a;int size;//以大堆的形式建的//初始化堆//插入堆中数据 或者 向上建堆//删除最大的元素// 获取顶部元素// 判断是否为空//获取树的大小// 堆排序 传的参数是一个数组, n 代表数组的大小// 把一个数组变成一个堆,(向上建堆)// 把一个数组变成一个堆,(向下建堆)注意我们是一大堆为模型的大堆就是树的根永远大于孩子。

2023-10-11 13:20:19 195

原创 秒懂数据结构—二叉树1(概念初晓篇)

struct Node* _firstChild1 通过这个结点(

2023-10-11 10:32:27 65

原创 strlen 的实现

strlen的实现

2023-03-08 12:38:51 93 2

原创 整形在内存中的存储

举例: int a = 1; int b = -1; int c = a+b;用原码进行计算:a的原码是00000000 00000000 00000000 00000001b的原码是10000000 00000000 00000000 00000001a,b相加得到c10000000 00000000 00000000 00000010这个原码翻译过来是-2,与1-1=0不否。补码计算:a的补码是00000000 000000

2023-02-05 17:28:27 110 4

原创 c语言数据类型

C语言数据类型unsinged 表示无符号signed 表示有符号

2023-02-05 16:46:52 57

原创 函数栈帧的创建和销毁及其相关问题的理解和解决(内功篇)

局部变量是怎样创建?局部变量为什么是随机值?函数是怎样传参的,传参的顺序是什么?形参实参有什么关系?函数怎样调用?函数调用结束后是怎样返回的?返回值怎样带回来的?那就跟我一起秒懂函数栈帧的创建和销毁把

2022-12-16 12:45:21 251 7

原创 秒懂操作符属性

操作符中的细节,来看看吧

2022-11-19 23:35:50 115 1

原创 秒懂表达式求值:(隐式类型转换,算术转换)

隐形类型转换,算数转换,带你探究其中的奥秘

2022-11-19 23:28:07 164

原创 秒懂函数(递归试炼篇:汉诺内部塔函数详解)

汉诺塔函数内部函数详解,手把手教你汉诺塔

2022-11-13 09:45:43 1198 11

原创 秒懂函数1(概念初晓篇)

函数理解,适合想要了解函数框架的人群

2022-11-04 12:06:05 221 7

原创 秒懂指针2.(小试牛刀):

指针还不清楚,那还不来看

2022-10-29 12:56:02 102 3

原创 指针秒懂1(如梦初醒):

想要理解指针,先要理解内存(指针概念篇)1.内存是计算机上的一种存储介质,也可以理解为存储空间。现在电脑一般有8G/6G程序运行的时候会载入内存程序中如果有数据需要储存,也会申请内存空间。如果想知道程序运行的时候会载入空间,你只需要打开任务管理器即可,(打开任务管理器的方法:按住ctrl+alt+del) 例如QQ在运行占了257.2MB内存,即申请了内存空间。如下2.电脑是怎样管理和分配内存的呢,我们把内存比作一栋楼,里面有很多房子,我们给房子编号,即门牌号。我们

2022-10-28 13:20:47 448 8

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除