- 博客(75)
- 资源 (1)
- 收藏
- 关注
原创 C++ : 继承问题 [virtual函数调用,为什么禁止在virtual使用默认参数]
在virtual函数中使用默认参数,因为virtual是动态绑定,导致都是调用了子类函数,但是默认参数是根据指针类型来使用的。当指针类型与实体类型不一致时,很不容易分清楚其调用规则。当指针类型与实体类型一致时,很容易分清楚其调用规则。virtual函数,通过指针调用的是子类函数。非virtual函数,取决于指针的类型。
2024-09-20 01:00:00
295
原创 C++ 科目二 智能指针 [weak_ptr] (解决shared_ptr的循环引用问题)
将CFather或者CSon的shared_ptr变成weak_ptr即可避免内存泄漏问题。
2024-09-17 02:00:00
208
原创 C++ 科目二 [const_cast]
const_cast 仅仅是深层拷贝改变,而不是改动之前的值如果需要使用改动后的值,需要通过指针或者引用来间接使用。
2024-09-16 20:29:54
363
原创 QEMU的时间
在icount模式下于与QEMU_CLOCK_VIRTUAL不同的是在虚拟cpu休眠的时候该值也会累加。HostOs的时间,类似墙上时钟,修改宿主机系统时间会改变这个时间。在非icount模式下和QEMU_CLOCK_VIRTUAL相同,不受虚拟系统的影响,随时间流逝而累加计数。虚拟时钟,记录GuestOS的时间滴答。
2024-09-15 10:08:37
1629
原创 C函数特性:构造与析构(constructor & destructor)
是 GCC 编译器的一个扩展属性,它允许你定义一个特殊的函数,这个函数会在 main 函数执行结束后,或者当调用 exit() 函数退出程序时自动执行。当你使用这个属性时,GCC 编译器会确保这个函数在程序的构造阶段被调用,也就是在 C++ 中的 std::ios_base::Init 对象被销毁之前。是 GCC 编译器的一个特性,它允许定义一个特殊的函数,这个函数会在 main 函数执行之前,也就是程序开始执行时被调用。这个优先级是一个整数值,优先级较小的构造函数会先于优先级较大的构造函数执行。
2024-09-07 00:30:00
361
原创 编译工具链【持续更新中】
clangld.lldlldU:引用但未在位码文件中定义的对象。C:公共符号(多个定义链接成一个定义)。W:弱引用(多个定义链接成零个或一个定义)。t:局部函数对象。T:全局函数对象。d:局部数据对象。D:全局数据对象。?:无法识别的内容llvm-objdump 是 LLVM 工具集中的一个工具,用于显示目标文件或可执行文件的信息显示符号表 (-t 或 --syms): 显示目标文件中的符号表,包括变量和函数等信息显示动态符号表 (-T 或 --dynamic-syms): 显示动态链接
2024-09-04 00:30:00
423
原创 linux命令:alias命令 和 unalias命令
使用 alias 命令。可以创建一个简短的别名(如 “cmd”)来代表整条命令。使用 unalias 命令。
2024-09-03 00:15:00
265
原创 C语言:字符串存在哪?
使用字符串字面量(如 “Hello, World!”)通常存储在只读的数据段中,这个区域有时被称为常量存储区。使用动态内存分配函数,如 malloc 或 calloc,分配的内存位于堆上。当你在函数内部定义一个字符数组并初始化一个字符串时,这个字符串就存储在栈上。局部变量(包括在函数内部定义的数组和变量)通常存储在栈上。如果你使用这些函数为字符串分配内存,字符串将存储在堆上。这些字符串是不可修改的,尝试修改它们将导致未定义行为。
2024-09-01 00:30:00
527
原创 编译原理:编译选项
O3 在 -O2 的基础上再打开一些优化选项:-finline-functions, -funswitch-loops 和 -fgcse-after-reload。“-ffoo”的否定形式为“-fno-foo”。-Wunreachable-code 如果编译器探测到永远不会执行到的代码,就给出警告。-O2 更多的优化,会尝试几乎全部的优化功能,但不会进行“空间换时间”的优化方法。-static 此选项将禁止使用动态库,所以,编译出来的东西,一般都很大。-E 只对文件进行预处理,不编译汇编和链接。
2024-08-31 00:30:00
737
原创 C语言:科目二【基础知识】
C++ 科目二 智能指针 [auto_ptr] (c++98引入,c++11停用,c++17废弃)C++ 科目二 智能指针 [weak_ptr] (解决shared_ptr的循环引用问题)C++ 科目二 智能指针 [unique_ptr] (auto_ptr 的演进版本)C++ 科目二 智能指针 [shared_ptr] (带计数的智能指针)c++ 科目二 每日一题 [ typedef 与 using ]c++ 科目二 每日一题 类相关[final关键字]
2024-08-22 14:43:31
1721
原创 参数与返回值
如果在定义时声明void参数,则需要严格按照声明进行使用。如果在定义时未声明void参数,可以接受任意参数。如果删除返回值,默认返回值是int。
2024-08-20 11:32:42
191
原创 常见字符串用法
sizeof(str) 【64位架构,8字节;32位架构,4字节 】sizeof(str) 【根据字符个数计算,包含字符串后得’\0‘】str++ // ERROR, 数组名不可以。
2024-08-19 15:59:20
183
原创 linux命令:重定向与管道
重定向允许你将命令的输出发送到文件而不是终端,或者从文件中读取输入。这是通过将前一个命令的标准输出重定向到下一个命令的标准输入来实现的。将输出写入文件,如果文件不存在则创建,如果已存在则覆盖原有内容。管道 (|) 允许你将一个命令的输出作为另一个命令的输入。将输出追加到文件末尾,而不是覆盖。从文件读取输入而不是标准输入。将错误输出重定向到文件。
2024-08-16 23:34:00
172
原创 汇编:64位机器上,C语言的返回值
在func01的汇编中,其返回值,被放入到%rax中【movabsq $8031924123371070824, %rax】在main函数中,调用func01前,在栈顶%rsp开辟了16字节的栈【subq $16, %rsp】使用 gcc -S demo.c 可以得到demo.s文件。$8031924123371070824是堆中的地址。此文件仅仅是在main函数中调用func01,
2024-08-14 09:59:26
376
原创 C函数特性:创建弱符号(weak symbol)
通过将中断处理函数声明为弱符号,编译器允许用户在其他地方提供自己的实现,如果没有提供,则使用默认的空实现。在STM32等微控制器的HAL库中,很多HAL函数被声明为弱符号,以便用户可以。可以允许用户提供自己的回调实现,如果没有提供,则使用库中的默认实现。在嵌入式编程中,中断处理函数通常需要用户根据具体的硬件配置来实现。在某些库函数中,可能需要用户提供回调函数来处理特定事件。它们以适应特定的硬件配置。
2024-08-12 14:35:51
413
原创 struct与union的区别
union通常用于在不同的时间点存储不同类型的数据,但只使用其中一种类型的场景,例如,根据不同的情况使用不同的数据表示方法。union的内存对齐通常取决于最大成员的对齐要求,但由于只存储一个成员,对齐的影响通常不会增加联合体的总大小。union的成员虽然可以独立访问,但要注意访问的是最后存储的成员的数据,这可能会导致数据不一致的问题。struct通常用于需要同时存储多个不同类型数据的情况,例如,表示一个具有多个属性的对象。union中一次只能存储一个成员的数据,如果存入新的数据,会覆盖之前存储的数据。
2024-08-02 23:40:48
325
原创 c++中的struct和class的区别
在C++中,struct的成员默认是公开的(public)。在C++中,class的成员默认是私有的(private)。class通常用于定义更复杂的数据结构,强调数据和行为的封装。struct通常用于定义简单的数据结构,强调数据的组合。
2024-08-01 11:53:34
188
原创 QEMU 新增QMP&HMP指令【原文阅读】
它指定一个QAPI类型’str’的参数’message’和一个QAPI类型’int’的参数’times’。HMP命令是通过QMP命令来实现的,下面的部分将演示上面的每个步骤。C实现签名必须遵循模式的参数顺序,该顺序由“data”成员定义,以测试我们的新版本的“hello-world”命令。通常,此类命令在QEMU中携带一些有意义的操作,但在这里,它只是将“Hello,world”打印到标准输出。典型的HMP命令包装在等效的QMP命令周围,但从QMP构建块构建的HMP方便命令也很好。
2024-07-30 23:07:25
1795
原创 引用与指针的区别
引用是一个已经存在的变量的别名,不能重新赋值;指针可以重新赋值,指向不同的地址。在C++中引用常用于函数参数,以避免复制大对象指针则用于更灵活的内存操作。
2024-07-29 21:20:36
148
原创 C++:继承问题 (菱形继承->虚基类)
多继承(Multiple Inheritance)是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。为了解决多继承时的命名冲突和冗余数据问题,C++ 提出了虚继承,使得在派生类中只保留一份间接基类的成员。尽管概念上非常简单,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突就是不可回避的一个。虚继承(Virtual Inheritance)
2024-07-28 22:48:39
282
red hat enterprise linux6.5(rhel6.5)安装oracle 11gR2缺少的包package
2017-06-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人