C\C++
小王要好好学习
学习C、C++
展开
-
多进程和多线程的使用场景
多进程和多线程的使用场景多进程模型的优势是CPU。多线程模型主要优势为线程间切换代价较小,因此适用于I/O密集型的工作场景,因此I/O密集型的工作场景经常会由于I/O阻塞导致频繁的切换线程。同时,多线程模型也适用于单机多核分布式场景。多进程模型,适用于CPU密集型。同时,多进程模型也适用于多机分布式场景中,易于多机扩展。一. 两者区别进程是分配资源的基本单位;线程是系统调度和分派的基本单位。属于同一进程的线程,堆是共享的,栈是私有的。属于同一进程的所有线程都具有相同的地址空间。多进程的优点:原创 2020-12-26 13:59:43 · 6106 阅读 · 0 评论 -
进程、线程
进程和线程的基本概念和区别?进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位。线程是进程的一个实体,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发。线程是操作系统可识别的最小执行和调度单位。每个线程都独自占用一个虚拟处理器:独自的寄存器组,指令计数器和处理器状态。每个线程完成不同的任务,但是共享同一地址空间(也就是同样的动态内存,映射文件,目标代码等等),打开的文件队列和其他内核资源。1.一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程依原创 2020-12-26 13:14:23 · 474 阅读 · 0 评论 -
unique_ptr如何实现独占对象
在C++11中有两个智能指针类型来管理动态对象,share_ptr允许多个指针指向同一个对象,unique_ptr则“独占”所指对象。我们知道指针或引用在离开作用域时是不会进行析构的,但是类在离开作用域时会自动执行析构函数,所以我们可以用一个类来实现指针指针(unique_ptr本质上是一个类,只是可以像一个指针一样使用)。因此我们可以通过析构函数调用delete去释放资源。那么如何实现“独占”呢?我们可以在类中把拷贝构造函数和拷贝赋值声明为private,这样就不可以对指针指向进行拷贝了,也就不能产.原创 2020-12-07 20:29:27 · 1267 阅读 · 0 评论 -
结构体内存对齐
1.对齐 第一个成员在结构体偏移量为0的地址处 其他成员要对齐到 某个数字的整数倍 这个数字 VS下是 min(8,该成员大小) 如果嵌套结构体,对齐数 = 编译器默认的一个对齐数与该嵌套结构体成员大小中的较小值,即min(8,嵌套结构体大小)2.补齐 结构体总大小是最大对齐数的整数倍。每个成员都由自己的对齐数,如果有结构体,把它当成一个成员。 切记,不是最大成员大小的整数倍!!!3.为什么存在内存对齐呢?平台原因(移植原因):不是所有的硬件平台都能访问任意原创 2020-12-06 22:40:49 · 170 阅读 · 0 评论 -
sizeof和strlen
区别1、sizeof是C/C++中的一个运算符,其作用是返回一个对象或者类型在内存中所占用的字节数。注意:sizeof后面如果是类型则必须加括号,如 sizeof(char);而如果是变量名则可以不加括号,如 sizeof a; 但是建议使用时 均加上括号。sizeof不能返回动态地被分配的数组的大小,很关键的一点!!!2、strlen是C语言中的库函数,所在头文件为#include <string.h> 其函数原型为 unsigned int strlen(char *s); 其中s原创 2020-12-06 22:39:26 · 96 阅读 · 0 评论 -
C++中数据存储位置
C++中数据存储位置:1.栈区:栈通常用于存储占用空间小,生命周期短的数据,如局部变量和参数变量等,需要时程序员直接声明变量使用,不需要时变量自动清除的存储区2.堆区(动态申请内存):通过由new和malloc分配,由delete和free手动释放,或者最后程序结束时由OS释放(不负责的行为)。堆内存(动态内存)的生存期人为决定,使用灵活,缺点是分配/释放不当容易造成内存泄漏,频繁分配/释放会...原创 2019-09-09 23:50:05 · 1920 阅读 · 0 评论