C++八股笔记1

C++里面的关键字,sizeof的作用是什么?

sizeof是一个运算符,用于获取特定类型或变量在内存中占用的字节数。

C++里面有哪些基础类型?表示多少字节?

如果有一个超长的数,long long都表示不下,我们要对这个大数运算,怎么办?

1、用一个大数类来处理:定义一个类,类内部用字符串来存储这个大数,然后编写相关的算法来支持这个数的运算操作。

2、使用Boost库中的boost::multiprecision::cpp_int的类型,可以支持任意精度的整数运算。

C++内存对齐

目的:

1、经过内存对齐后,CPU的内存访问速度大大提示。CPU把内存当成一块一块的,块的大小可以是2,4,8,16个字节,因此CPU读内存是一块一块读取的。比如CPU读取1个4个字节的数据到寄存器,如果数据是从0字节开始,那么直接将0-3四个字节完全读取到寄存区中即可。如果数据是从1字节开始,那么先读0-3,再度4-7,接着把0,5,6,7四个字节剔除,最后合并1,2,3,4四字节的数据进入寄存器。所以,当内存没有进行内存对齐,寄存器进行了很多额外的操作,大大降低了CPU的性能。

2、有利于平台移植。有的CPU遇到未进行内存对齐的处理直接拒接处理,不是所有的硬件平台都能访问任意地址上的任意数据。

规则:

1、结构体第一个成员的偏移量(offset)为0,以后每个成员相对于结构体首地址的offset都是该成员大小与有效对齐值中较小那个的整数倍,如果有需要编译器会在成员之后加上填充字节。

2、结构体的总大小为有效对齐值的整数倍,如果有需要编译器会在成员之后加上填充字节。

有效对齐值:

1、特定平台的编译器都有自己的默认“对齐系数”,vs里为8,可通过#prgma pack(n), n=1,2,4,8,16

来改变这一系数。

2、有效对齐值,#prgma pack(n)结构体中最长数据类型长度中较小的那个。

一下代码的输出结果是什么?

值传递,引用传递,地址传递?

值传递,将实参的值复制一份传递给函数的形参。

函数内部对形参的修改不会影响到实参的值。

引用传递,将实参的内存地址传递给函数的形参。

函数内部对形参的修改会影响到实参的值。节省内存空间和传递数据的时间。

地址传递,将实参的内存地址传递给函数的形参。

函数内部可以通过解引用来修改实参。

描述一下函数调用的过程

以函数A调用函数B为例:

参数传递以及函数返回点记录:将A传入的参数以及调用完之后的函数的返回地址放在A的栈帧中。

创建新栈帧:调用函数B,此时会为B创建一个栈帧。

跳转到函数体:将程序的控制权转移到被调用函数的函数体内(B)。

执行函数体:在函数体内部执行函数的逻辑(B)。

返回值传递:如果函数有返回值,将返回值传递给调用者。这个过程可以是通过寄存器、栈帧等方法传递。

栈帧销毁:当函数执行完毕并准备返回时,销毁函数的栈帧,释放站上的内存空间。同时,将程序的控制权返回给调用者(A)。

返回地址恢复:从栈上弹出返回地址,并将程序的控制权返回到调用函数的下一条指令。

class和struct的区别?

1、默认的继承访问权限,struct是public,class是private。

2、struct作为数据结构的实现体,它默认的数据访问控制是public的,class作为对象的实现体,它默认的成员变量访问权限是private。

3、class关键字可以定义模版参数,就像typename,但struct关键字不用于定义模版参数。

进程和线程的区别?

进程是程序的一次执行,是系统进行资源分配的基本单位。每个进程都有自己的独立地址、内存、文件描述符、和其他系统资源。

线程是进程内的执行单元,共享同一地址空间和其他资源。多个线程可以共享进程的资源。

你是如何做线程同步的?

互斥锁(Mutex):互斥锁用于保护临界区,确保同一时间只有一个线程访问共享资源。当一个线程获取了互斥锁后,其他线程必须等待锁被释放才能继续执行。常见的互斥锁:std::mutex std::lock_guard std::unique_lock。

信号量(Semaphore):信号量是一个计数器,用于控制多个线程对共享资源的访问。信号量包括两种类型:二进制信号量(只能取值0或1)和计数信号量(可以取任意非负整数值)。常见的信号量有std::binary_semaphore(C++20引入)和操作系统提供的信号量。

条件变量

屏障

原子操作

读写锁

你使用过线程池吗?

如果让你设计一个线程池,你该如何实现呢?

  • 27
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值