- 博客(9)
- 收藏
- 关注
原创 Linux普通用户root用户之间的切换
通常不需要使用特定的命令,因为你可以直接通过命令行界面(CLI)输入该普通用户的用户名来切换到该用户。但是,为了避免潜在的权限问题,可以使用su(substitute user 或 switch user)命令来显式地切换到另一个用户。
2024-07-14 18:16:35
641
原创 new /delete和malloc/free
对于基本数据类型(或称为内置类型,如 char, int, double 等),new 和 delete 确实在行为上与C语言中的 malloc 和 free 类似,但它们在C++的上下文中具有更多的功能和安全性。综上所述,虽然对于内置类型而言,new/delete和malloc/free在功能上可能没有明显区别,但从安全性、可读性、可移植性和最佳实践的角度来看,new/delete是更好的选择。通过显式地分配和释放内存,我们可以更容易地跟踪和管理内存的使用情况,从而避免内存泄漏和其他与内存相关的问题。
2024-06-30 20:53:52
886
原创 结构体内存对齐相关
因为不同的硬件平台可能使用不同的大小端模式,所以在发送或接收数据时,需要确保数据的字节顺序在发送方和接收方是一致的。大端(Big-endian)模式下,数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中;小端(Little-endian)模式则相反,数据的低字节保存在内存的低地址中,而数据的高字节保存在内存的高地址中。如果数据跨越了两个或多个内存页,或者跨越了缓存行的边界,处理器可能需要额外的操作来访问这些数据,这会导致性能下降。不同的硬件平台和操作系统可能有不同的内存对齐要求。
2024-06-24 20:56:30
220
原创 为什么命名空间域和类域不会影响生命周期
对象的生命周期是由创建它的代码(如new关键字在许多编程语言中)和销毁它的代码(如垃圾回收机制或显式调用析构函数)决定的。在编程中,命名空间(Namespace)和类(Class)是两个不同的概念,它们与对象的生命周期(Lifecycle)有间接的关系,但通常不直接决定对象的生命周期。类的生命周期通常与程序的运行时间相同,但类的实例(对象)可以有自己的生命周期。命名空间只是代码的组织结构,它不会影响在命名空间中定义的对象或类的生命周期。对象的生命周期是由其创建和销毁的时间点决定的,这通常与类的定义无关。
2024-06-24 12:04:15
295
原创 产生临时变量的一些场景
例如,将 char* 类型的字符串字面量传递给需要 const std::string& 参数的函数时,编译器会创建一个 std::string 类型的临时变量来存储这个字符串。例如,将 double 类型的变量转换为 int 类型时,会创建一个 int 类型的临时变量来存储转换后的值。当将右值(没有内存空间,无法直接访问的数据对象)赋值给const引用时,编译器会创建一个临时变量来存储这个右值,并让const引用指向这个临时变量。在某些情况下,编译器可能会出于优化和性能考虑而创建临时变量。
2024-06-23 18:18:59
302
原创 运算符重载和函数重载的关系
运算符重载(Operator Overloading)和函数重载(Function Overloading)在C++等支持这些特性的编程语言中都是重要的概念,但它们服务于不同的目的并有着各自的定义和用法。尽管它们在某些方面可能看起来相似,但它们之间有一些关键的区别。
2024-06-22 11:29:39
116
原创 #include<iostream>,using namespace std,c++标准库之间的关系
在某些情况下可能很方便,但在大型项目或与其他代码库交互时,最好显式地使用std::前缀来引用标准库中的名称,或者只选择性地使用using声明来引入特定的名称。命名空间是一种避免命名冲突的方法,它允许你将相关的名称(如函数名、类名、变量名等)组合在一起。如果你的代码或第三方库中的名称与标准库中的名称相同,那么使用using namespace std;这是一个命名空间指令。在C++中,为了避免名称冲突,很多库都使用命名空间来组织它们的名称。是C++标准库中的一个头文件,它包含了用于输入输出的类和函数,如。
2024-06-21 21:36:52
412
原创 归并排序的时间复杂度和空间复杂度详细解释
归并排序(Merge Sort)是一种分治(Divide and Conquer)策略的排序算法。下面我将详细解释归并排序的时间复杂度和空间复杂度。
2024-06-19 11:21:00
325
原创 快速排序的时间复杂度和空间复杂度的详细解释
快速排序(QuickSort)是一种非常高效的排序算法,其平均时间复杂度为O(n log n),但在最坏情况下可能达到O(n^2)。每一层的时间复杂度为O(n)(因为需要遍历整个数组进行分区),所以总的时间复杂度为O(n) * h = O(n log n)。空间复杂度:最好情况下为O(log n)(递归栈),最坏情况下为O(n)(递归栈),额外空间为O(1)。在这种情况下,时间复杂度为O(n) + O(n-1) + ... + O(1) = O(n^2)。当子数组的大小为1时,递归结束。
2024-06-18 20:29:24
333
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人