- 博客(55)
- 资源 (3)
- 收藏
- 关注
原创 20、执行期类型识别
执行期类型识别:Runtime Type Identification,RTTI其中gen是 generic的简称,用来表现一个overloaded function。于是只要你有一个变量,或是类型type *的成员(并知道它代表一个函数),你就必须决定其特定的derived type是否为fct或是gen。在2.0 导入const member functions之前,conversion运算符不能够被overloaded,因为它们不使用参数。
2025-04-14 08:56:30
583
原创 19、Template
template是最令程序员挫败的一个主题,这一节的聚焦放在template的语意上面,我们将讨论templates在编译系统中“何时”、“为什么”以及“如何”发挥其功能。我们使用“实例化”来表示进程(process)将真正的类型和表达式绑定到template相关形式参数(formal parameters)上头。举个例子。
2025-03-14 09:06:04
1038
原创 18、new和delete运算符
但事实上它是由两个步骤完成的:1)通过适当的new运算符函数实例,配置所需的内存://调用函数库中的new运算符2)将配置得来的对象设立初值:*pi = 5;更进一步地说,初始化操作应该在内存配置成功后才执行://new 运算符地两个分离步骤int *pi;*pi = 5;以constructor来配置一个class object,情况类似。例如:在这里,如果以new运算符配置object,而其constructor抛出一个exception,配置得来的内存就会被释放掉。
2025-03-02 15:43:12
331
原创 17、对象的构造和析构
下面是cfront的输出。2)类似情况,在每一个需要静态的内存释放操作(static dealllocation)的文件中,产生一个__std()函数(译注:我想std就是static deallocation的缩写),内含必要的destructor调用操作,或是其inline expansions。3)提供一组runtime library “munch”函数:一个_main()函数(用以调用可执行文件中的所有__sti()函数),以及一个exit()函数(以类似的方式调用所有的__std()函数)。
2025-02-26 08:44:13
932
原创 3、qtcreator和makefile项目一起使用
部分老项目的build系统是makefile,这些老项目在维护期间也需要IDE单步调试。本文介绍在Linux环境中qtcreator和makefile项目如何一起使用。
2025-01-24 13:57:50
448
1
原创 16、继承体系下的对象构造
当我们定义一个object如下:T object;在这里,不明显的是constructor的调用真正伴随了什么?Constructor可能含有大量的隐藏代码,因为每个编译器会扩充每一个constructor,扩充的程度视class T的继承体系而定。这一节中,我要从“C++语言对classes所保证的语意”这个角度,探讨constructor扩充的必要性,如下所示的代码。
2025-01-15 09:02:38
982
转载 15、无继承情况的对象构造
public:private:这个经过封装的Point class,其大小并没有改变,还是三个连续的float。是的,不论是private或public存取层,或是member function的声明,都不会占用额外的对象空间。
2024-12-30 08:45:54
605
原创 14、Inline Functions
理论上,一个比较干净的做法是使用inline函数来set和get函数由于我们受限只能在上述的两个函数中对_x直接存取,因此也就将稍后可能发生的data members的改变所带来的冲击最小化的。如果把这些存取函数声明为inline,我们就可以继续保持直接存取members的那种高效率---同时我们兼顾了函数的封装性。此外,加法运算符不再需要被声明为Point的一个friend。
2024-11-20 08:49:02
421
原创 13、指向Member Function的指针
或者和指向member function的指针声明语法,以及指向“member selection运算符”的指针,其作用是作为this指针的空间保留者。这也是为什么static member functions(没有this指针)的类型是“函数指针”,而不是“指向member function的指针”之故。
2024-11-14 08:56:04
515
原创 5、VxWorks6.9采用IDE单步调试
1)host机器,即windows8虚拟机,装有完整的wind river workbench3.3和VxWorks6.9.4。2)target机器,即VxWorks6.9.4虚拟机。
2024-11-13 10:04:46
245
原创 12、Virtual Member Functions
为了支持virtual function机制,必须首先能够对于多态对象有某种形式的“执行期类型判断(runtime type resolution)”。也就是说以下的调用操作需要ptr在执行期的某些关键信息。ptr->z();如此一来,才能够找到并调用z()的适当实例。或许最直接了当但是成本最高的解决方法是把必要的信息加在ptr身上。在这样的策略下,一个指针(或是一个reference)持有两项信息。它所参考的对象的地址对象类型的某种结构,用以正确决议出z()函数实例的地址。
2024-11-08 08:54:45
893
原创 4、VxWorks6.9虚拟机网络测试
Wind River 提供的FTP服务器,BSP和VxWorks的镜像文件,虚拟机VMware Workstation Pro 17,挂载卸载虚拟磁盘工具ImDiskTk20240210,
2024-10-29 11:15:00
441
原创 3、WMWare 17虚拟机BSP和Image构建
1、工具介绍WindRiver Workbench3.3 + VxWorks6.9.4,2、详细操作步骤2.1 创建并配置BSP选择拷贝文件到工程中默认的BSP可以编译配置BSP的环节参考CSDN的博客,《VxWorks6.9在VMWare虚拟机运行》,具体参考“2.2 修改config.h内容-->2.8编译”3、工具包文件
2024-10-29 10:59:18
298
原创 2、MS-DOS系统构建
MS-DOS镜像文件,他的版本是6.2版本。挂载卸载虚拟磁盘工具ImDiskTk20240210,虚拟机VMware Workstation Pro 17,
2024-10-29 10:54:22
54
原创 1、VxWorks6.9虚拟机环境构建
为了开发VxWorks6.9.4的网络应用程序,并脱离对PowerPC板卡的依赖,我们需要构建VxWorks6.9.4虚拟机环境。我们期望VxWorks6.9.4和Wind River Workbench3.3安装在Windows 8.0上。我们也期望VxWorks6.9.4能够运行在WMWare Workstation 17 Pro上。为了实现上面的目标,采用的技术路线是:1)安装MS-DOS,让VxWorks的bootrom存放在MS-DOS的磁盘上。并有MS-DOS启动bootrom。
2024-10-29 10:18:15
231
原创 11、Member的各种调用方式
由于member function可以被重载化(overload),所以需要更广泛的mangling 手法,以提供绝对独一无二的名称。1)改写函数的signature(译注:指的是函数原型)以安插一个额外的参数到member function中,用以提供一个存取管道,使class object得以将此函数调用。C++的设计准则之一就是:nonstatic member function至少必须和一般的nonmember function有相同的效率。它提供了一个意想不到的好处:称为callback函数。
2024-10-25 08:46:40
701
1
原创 10、继承与Data Member
在C++继承模型中,一个derived class object所表现出来的东西,是其自己的members加上其base class(es) members的总和。至于derived class members和base class(es) members的排列顺序,则并未在C++ Standard中强制规定,理论上编译器可以自己安排。
2024-10-14 09:04:22
795
原创 2. ZMQ不同样式的路由方式
1、ZMQ_REQclientserviceservicesserviceDirectionLast peerBlock2、ZMQ_REPDirectionLast peerzmq_sendDirectionBlockDirectionSee text在以上的字段,对于该socket处于bind()或者connect()状态,此时路由是什么效果呢?
2024-09-25 13:21:52
918
原创 1. ZMQ发送和接收数据消息格式总结
透传.When a 'ZMQ_DEALER' socket is connected to a 'ZMQ_REP' socket each message sent must consist of an empty message part, the delimiter, followed by one or more body parts.完全是透传的样式,经过该样式的socket不添加或者去除任何消息。添加第1帧,内容是发送端的ID地址,然后告知应用层。去掉第1帧,第1帧作为路由地址发送。
2024-09-25 08:24:31
566
原创 ZMQ专栏
在学习和使用ZMQ的过程中,记录ZMQ最精华的部分。我对ZMQ的本质理解是什么?即ZMQ定义了样式通信,这种样式通信又可以转换成数据收发(发送端和接收端),这种数据收发又可以转换成数据消息格式和路由。因此ZMQ的本质最终是数据消息格式和路由。
2024-09-25 08:17:25
163
原创 9、Data Member的存取
答案是“当Point3d是一个derived class,而继承结构中有一个virtual base class,并且被存取的member(如x)是一个从该virtual base class继承而来的member”时,就会有重大的差异。这会在接下来的章节进行说明(继承对于member布局的影响)。若取一个static data member的地址,会得到一个指向其数据类型的指针,而不是一个指向其class member的指针,因为static member并不含有一个class object之中。
2024-09-22 17:24:54
818
原创 8、Data Member的绑定
但这并不一直都是正确的,而是C++2.0的Reference manual修订后才是正确的。这个古老的语言规则被称为“member rewriting rule”,大意是“一个inline函数实体,在整个class声明未被完全看见之前,是不会被评估求值(evaluated)的”。当后续再有length的nested typedef声明出现时,C++ Standard就把稍早的绑定标记为非法。Argument list中的名称还是会在他们第一次遭遇时被适当的决议(resolved)了。
2024-09-22 12:04:33
196
原创 7、类的大小
在GCC x86 64Bit中,一个empty virtual base class被视作derived class object最开头的一部分,也就是说它没有花费任何的额外空间。上述的X,Y,Z,A中没有任何一个class内含有明显的数据,其间只表示了继承关系,所以有人认为每个class的大小应该是0。在32位计算机中,通常alignment为4bytes(32位),以使bus的“运输量”达到最高的效率。对于C++的类而言,类的大小似乎并非完全由用户控制,我们看看如下的代码。
2024-09-14 08:17:39
424
原创 6、成员们的初始化列表
事实上,有些微妙的地方需要注意,list中的项目顺序是由class中members声明顺序决定的,而不是initialization list中的编排顺序决定的。在本例子中,_name被声明在_cnt之前,所以它的初始化较早。问题在于,由于声明顺序的缘故,initialization list中的i(j)其实要比j(val)更早的执行,但是j一直没有初始值,所以i(j)的执行结果导致i无法预知其值。在下面的情况下,为了让你的程序被顺序的编译,你必须使用member initialization list。
2024-09-11 08:42:36
291
原创 5、程序转换语意学
如果Point3d class声明一个或一个以上的virtual functions,或内含一个virtual base class,那么使用上述的函数将会导致那些“被编译器产生的内部members”的初值改写。把一个class object当作参数传给一个函数(或是作为一个函数的返回值),如下的代码要求局部的实例x0以memberwise的方式将xx当作初值。在编译器的实现技术上,有一种策略是导入临时性object,并调用copy constructor将它初始化,然后将此临时性object交给函数。
2024-09-05 08:48:27
576
原创 4、Copy Constructor的构造操作
1)当一个class内含一个member object而后者的class声明一个copy constructor时(不论是class设计者显示的声明,还是编译器隐式的合成),例如下面的代码,String显示的声明了,而Word隐式的合成。然后,Bear class object以另一个Bear class object作为初值,我可以看到yogi的vptr值拷贝给了winnie的vptr了,这样的操作是安全的,它是通过编译器合成的拷贝构造函数完成的。对于Word verb = noun;
2024-08-29 08:58:09
1164
原创 3、Default Constructor的构造操作
如果一个class没有任何的constructor,但是它内含一个member object,而后者有一个default constructor,那么这个class 的implicit default constructor就是nontrivial,编译器需要为该class合成一个default constructor。例如如下的代码,代码中A,B,C均需要合成一个default constructor,并在里面安插那些“允许每一个virtual base class的执行期存取操作”的代码。
2024-08-18 11:01:12
802
原创 1、 C++对象模型简介
为什么C++可以“自动完成”这么多事情,多态的底层实现是什么样子的,理解了C++的对象模型后,可以写出比较没有错误且比较有效的代码。
2024-08-02 08:57:52
1063
原创 ucoreOS操作系统博客导航栏
跟着清华大学的学堂在线公开课,对操作系统的原理和实验有了更加深刻的理解。回顾自己2年来从不懂实验的基本的宏定义,到能用预编译指令展开宏,从代码深奥无比,支离破碎的理解,到能全局的理解一个或多个实验。其中最值得肯定的是走了一条正确的道路,即理论加实验学习,尤其提高实验的投入时间。其次,清华大学的操作系统学习是一门十分的系统课程,有利于提高系统思维。
2024-04-03 07:50:13
615
原创 实验二 物理内存管理-实验部分
在X86系统中,正好支持分段和分页这两种机制。将逻辑地址转换成线程地址空间的过程,称为分段,而将线性地址转换成物理地址空间的过程称为分页。分段和分页的过程如下图所示。图3-1 分段和分页分段提供一种划分处理器地址内存空间成更小的保护地址空间,这种地址空间称为段。段可以用来维持一个程序的代码、数据、堆栈。或者用来维持一个系统的数据结构,如TSS、LDT。
2024-02-17 12:33:33
1288
2
原创 实验五 用户进程管理-实验部分
由于进程的执行空间扩展到了用户态空间,且出现了创建子进程执行应用程序等与lab4有较大不同的地方,所以具体实现的不同主要集中在进程管理和内存管理部分。在内存管理部分,与lab4最大的区别是增加了用户态虚拟内存的管理。为了管理用户态的虚拟内存,需要对页表的内容进行扩展,能够把部分的物理内存映射成用户虚拟内存。如果某进程执行的过程中,CPU在用户态下执行,则可以访问本进程页表描述的用户态虚拟内存(如下代码的cr3),由于权限不够,不能访问内核态虚拟内存。
2023-12-24 14:54:53
300
原创 Lab5用户进程管理内存布局解析
关于用户进行内存布局,最重要的是代码段、数据段、调试段的符号地址。这些地址在链接器的控制下,给定symbols table。其中ENTRY(kern_entry)规定加载器的加载地址,其中. = 0xC0100000;规定bin/kernel的内存布局起始地址,其中symbol table中的地址顺序是依靠实际链接目标文件顺序。在bin/kernel中有三类数据段,分别是.rodata、.data、.bss。最让人分不清的是.data和.bss的区别。
2023-10-29 10:42:22
291
原创 实验四 内核线程管理-实验部分
进程是指具有一定独立功能的程序在一个数据集合上的一次动态执行过程。每一个进程都有它独立的main函数,独立的功能。每一个进程都在自己的内存空间执行,这个内存空间就是数据集合。每一个进程都在CPU上的一次动态执行,这个动态执行依靠的是进程在CPU上的并发执行。lab2和lab3完成了对内存的虚拟化,但整个控制流还是一条线串行执行。lab4将在此基础上进行CPU的虚拟化,即让ucore实现分时共享CPU,实现多条控制流能够并发执行。
2023-10-03 21:42:02
420
原创 实验六 调度器-实验部分
本章介绍调度器涉及的核心知识点以及进程调度器设计的目标进程的生命周期的角度看,、切换、退出属于操作系统课程的第5个实验的重要内容。本章继续从进程的生命周期角度出发,对进程调度进行设计与分析。
2023-07-29 21:43:32
1321
原创 实验八 文件系统-实验部分
针对ucore的实验八--文件系统,本文从两个方面进行详细的介绍。一是文件系统所涉及的核心知识点。二是针对实验,详细解读实验的如何设计和思考的。
2023-07-02 20:06:39
1632
1、MS-DOS 6.2版本 2、磁盘挂载工具 3、镜像文件
2024-10-29
devicetree-specification-v0.2.pdf
2020-06-08
H.264视频字节流解析成NALU
2020-08-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人