- 博客(38)
- 收藏
- 关注
原创 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,它是一个关键字(后面会讲),返回对象在堆上的内存地址,所以要用指针对象。一般可以在栈内创建就在栈上创建,因为性能问题,在堆上分配要比栈上花费更长时间,而且在堆上分配必须要手动释放被分配的内存。释放内存,不手动释放会导致内存泄漏。创建并初始化对象,内存分配到栈上,适合比较小的类,因为栈比较小。除非创建对象比较大或者想显示的控制对象的生命周期,那就用堆创建。进程结束所有内存被自动释放。
2023-02-03 15:32:52
337
原创 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++构造函数与析构函数
每当创建一个类的实例,它的构造函数会自动运行进行初始化,构造函数的名字必须和类名相同,构造函数可以没有任何参数和内容,一个类会有一个默认的构造函数,可以使用 类名()=delete 来删除默认构造函数。构造函数可以被重载。析构函数名字就是构造函数前面加上~,当对象被销毁时自动调用析构函数。
2023-02-03 15:28:24
88
原创 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
原创 文件锁fcntl
文件锁可以给整个文件或者一部分上锁,只读锁或者读写锁,只读锁又叫共享群,多个文件不冲突;读写锁又叫互斥锁,互相冲突。关闭文件时,所有锁将被移除。
2023-02-03 15:09:32
90
原创 文件的映射
从物理地址映射一个空间到虚拟地址(内存),改变映射空间可以直接改变物理内存。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
原创 动态加载API
动态加载不同于自动加载,动态加载通过dlfun.h的函数来加载动态库里的方法;关闭动态库,使handle数字-1,为0是从内存中移除。dlsymbol (handle,加载的函数名);成功返回动态库加载到内存的地址;dlopen(库文件,加载方式);成功返回0,失败非0。
2023-02-03 14:53:41
78
原创 静态库和动态库
静态库是把库里面的代码复制到可执行文件里面;动态库是把库里面的代码加载到内存中;静态库后缀.a,动态库后缀.so;静态库冗余大,适合嵌入式;动态库适合在线更新;
2023-02-03 13:30:36
61
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人