自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux使用Socket实现多进程和多线程服务端通信及测试

代码贴图:测试:

2023-05-15 14:45:06 226

原创 c++动态数组

动态数组vector的使用与优化

2023-02-10 19:15:51 306

原创 C++的复制与拷贝构造函数

C++的复制与拷贝构造函数。应该总是通过const引用传递对象。

2023-02-04 11:01:21 734

原创 C++智能指针

C++栈对象超出作用域自动销毁,而堆对象需要手动new创建和delete来清理,为了防止忘记释放内存可以使用智能指针。

2023-02-03 22:08:36 206 1

原创 C++中的this关键字

this 是C++中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。

2023-02-03 19:48:16 1045

原创 C++运算符及其重载

在C++中运算符不仅包括+、-、*、/,还有

2023-02-03 18:53:57 145

原创 c++隐式转换与explicit

/这条语句实际上会报错,因为“Name”是sting类型,而参数test是char数组,一次隐式转换不够。先强制转换成Entity型,在隐式转换成string型。//创建一个Entity实体,参数未指定类型,构造方法隐式转换成int型。: Name(name),Age(-1) { } //成员初始化列表。//一次隐式转从Entity型转换成int型。

2023-02-03 15:34:18 109

原创 c++ new关键字

delete[] a;在堆上释放指针数组内存,delete entity;使用new以后必须手动释放内存,

2023-02-03 15:33:28 84

原创 c++对象的创建和初始化

创建并初始化对象,内存分配到堆上,其中最关键的不是*,而是new,它是一个关键字(后面会讲),返回对象在堆上的内存地址,所以要用指针对象。一般可以在栈内创建就在栈上创建,因为性能问题,在堆上分配要比栈上花费更长时间,而且在堆上分配必须要手动释放被分配的内存。释放内存,不手动释放会导致内存泄漏。创建并初始化对象,内存分配到栈上,适合比较小的类,因为栈比较小。除非创建对象比较大或者想显示的控制对象的生命周期,那就用堆创建。进程结束所有内存被自动释放。

2023-02-03 15:32:52 337

原创 c++成员初始化列表

构造函数成员初始化覆盖实际创建的默认初始化。

2023-02-03 15:31:54 87

原创 c++ const and mutable

只能在类中使用,这个方法不能改变类中的变量值。不能改变指针指向的地址的值。不能改变指针指向的地址。允许在标记const方法中改变这个变量。

2023-02-03 15:31:44 89

原创 c++array

在堆上创建数组,生存周期是主动销毁之前都是活动状态。程序在访问这给数组时会先访问指针地址,再跳转到数值,这种方式是间接寻址,影响性能。在栈上创建数组,生存周期一个代码块。可能的话应该尽量在栈上面创建数组来避免性能影响。c++数组是一个连续的数据块,

2023-02-03 15:30:43 96

原创 c++可见性

其中protected表示只有自己和子类可以访问自己类中的变量和函数。private表示私有,只有自己和友元可以访问其中的变量和函数。private、protected和public,c++中可见性定义符有三个。

2023-02-03 15:30:13 185

原创 c++虚函数

4.当class的设计目的如果不是作为base class使用,或不是为了具备多态性,则就不该声明virtual析构函数。(因为如果class中含有virutal函数会使得该class的体积增加,因为添加一个vptr(virtual table pointer)会增加其class大小达50%-100%)。同时,需要将定义的指针指向其他对象时,要进行强制类型转换。1.在使用继承的方式实现运行时多态时,基类需要将与派生类相同函数名的函数加上virtual关键字,这样才可以在运行时精准识别出子类的虚函数。

2023-02-03 15:29:03 84

原创 c++类的继承

class 类名 : public 父类名。子类可以访问父类中任何非私有的东西。

2023-02-03 15:28:57 76

原创 c++构造函数与析构函数

每当创建一个类的实例,它的构造函数会自动运行进行初始化,构造函数的名字必须和类名相同,构造函数可以没有任何参数和内容,一个类会有一个默认的构造函数,可以使用 类名()=delete 来删除默认构造函数。构造函数可以被重载。析构函数名字就是构造函数前面加上~,当对象被销毁时自动调用析构函数。

2023-02-03 15:28:24 88

原创 c++函数

函数分为声明和定义,声明写在头文件里,定义写在cpp文件中。除了主函数,其他非void返回值类型的函数必须有返回值。

2023-02-03 15:27:26 77

原创 C++的变量

一般一个bool类型变量占用一个byte,因为内存寻址只能通过byte,不能通过bit寻址,那感觉有些浪费,因为一个bool变量只存一个bit的值,当然我们可以通过用一个byte存8个bool的方式来解决。它们的大小由编译器决定。那么我们如何知道当前的变量大小,可以用sizeof ()函数得到。C++数据类型:char,short,int,long,long long,还有float,double以及bool。无符号unsigned。

2023-02-03 15:27:14 86

原创 C++编译和链接

链接在编译之后会带走所有的.obj目标文件进行链接,链接会检查用到或者声明的函数是否存在,有趣的是,如果你定义了一个函数a,里面调用的函数b不存在,但实际上你没有用到函数a,此时也会报链接错误,这是因为编译器觉得你在这个文件用不到,但可能会在其他文件用到函数a,所以还是检查了a函数的链接问题,那其实如果我们告诉编译器我只在这个文件用到函数a,其他文件不会用到,那么编译器就不会检查这个文件没有用到的函数的链接问题,那么如何实现呢?c++编译生成一个.obj的可执行文件,此时会加载预处理和检查语法错误。

2023-02-03 15:26:01 192

原创 线程同步(信号量)

信号量实现线程同步

2023-02-03 15:24:50 85

原创 线程同步(mutex,条件变量)

实现线程同步

2023-02-03 15:24:35 79

原创 线程基础.

如果一个函数访问了全局变量,静态局部变量,堆,那么这个函数是不可重入函数。

2023-02-03 15:23:21 65

原创 IPC 共享内存

进程通信之共享内存

2023-02-03 15:21:28 78

原创 IPC 管道,信号

IPC(Inter Process Communication),用管道和信号实现进程通信的方法

2023-02-03 15:20:57 70

原创 进程操作环境变量

进程对环境变量的操作

2023-02-03 15:16:00 69

原创 子进程映像的更新

更新子进程的映像

2023-02-03 15:15:02 71

原创 进程的创建,终止,回收

进程的创建、终止与回收

2023-02-03 15:11:07 67

原创 文件锁fcntl

文件锁可以给整个文件或者一部分上锁,只读锁或者读写锁,只读锁又叫共享群,多个文件不冲突;读写锁又叫互斥锁,互相冲突。关闭文件时,所有锁将被移除。

2023-02-03 15:09:32 90

原创 文件权限与元数据

处理用户和用户组对文件的权限

2023-02-03 15:04:13 79

原创 文件的映射

从物理地址映射一个空间到虚拟地址(内存),改变映射空间可以直接改变物理内存。void *mmap (起始地址,文件大小,权限,共享或私有,-1,0);int munmap (起始地址,空间大小);成功返回分配空间的起始地址。映射一个空间给虚拟地址;失败返回-1以及错误码。

2023-02-03 15:02:40 87

原创 audio track,flinger,policy

audio track负责收集app的声音参数如:采样率,声道,数据源;audio flinger负责处理声音,如:平衡采样率(极个别不平衡),混音;audio policy负责决策声音的走的通道以及从哪个播放器放出;audio hal没什么用,用于保护商业机密(为了不开源);kernel音频驱动;adsp负责把采样率平衡到最高的那个采样率;输出到耳机或者扬声器(由audio policy决定)。

2023-02-03 15:01:39 177

原创 文件的管理,权限,描述符

这个数字在一个进程中表示一个特定含义,当我们open—个文件时,操作系统在内存中构建了一些数据结构来表示这个动态文件,然后返回 给应用程序一个数字作为文件描述符,这个数字就和我们内存中维护的这个动态文件的这些数据结构绑定上了,以后我们应用程序如果要操作这个动态文件,只需要用这个文件描述符区分。UNIX shell使用文件描述符0与进程的标准输入相结合,文件描述符1与标准输出相结合,文件描述符2与标准错误输出相结合。写入文件,把buf的数据写入文件,通常buf的大小和后面一次写入的大小一致;

2023-02-03 14:58:41 171

原创 进程的映像

数据段是当这个进程销毁时才会释放,静态变量和全局变量存放在这里(静态变量一个进程只执行一次);一个进程用到的内存有:代码段,数据段,堆,共享库,栈。栈是存放指针变量的空间,局部变量的空间。堆是存放给指针分配的空间;

2023-02-03 14:57:41 72

原创 关于c语言指针用%s,%p打印

p是把指针变量p中存储的a的地址以十六进制形式输出,%d是吧p中存储的a的地址以十进制形式输出。%s是根据首地址输出值,如果是*p则取得不是地址会出错,所以要用p。*p输出指针存的地址(变量)的值;p存的是(变量)地址。

2023-02-03 14:56:51 2897

原创 错误管理.

有errno,strerror,perror。

2023-02-03 14:54:48 66

原创 动态加载API

动态加载不同于自动加载,动态加载通过dlfun.h的函数来加载动态库里的方法;关闭动态库,使handle数字-1,为0是从内存中移除。dlsymbol (handle,加载的函数名);成功返回动态库加载到内存的地址;dlopen(库文件,加载方式);成功返回0,失败非0。

2023-02-03 14:53:41 78

原创 环境变量和自定义变量

自定义变量不会被子进程继承,环境变量可以;自定义变量通过export变成环境变量。

2023-02-03 14:50:39 71

原创 静态库和动态库

静态库是把库里面的代码复制到可执行文件里面;动态库是把库里面的代码加载到内存中;静态库后缀.a,动态库后缀.so;静态库冗余大,适合嵌入式;动态库适合在线更新;

2023-02-03 13:30:36 61

空空如也

空空如也

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

TA关注的人

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