C++基础知识
文章平均质量分 56
C++基础知识
blessing-嵌入式
这个作者很懒,什么都没留下…
展开
-
细说new与malloc的10点区别
而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。可以看出A的默认构造函数并没有被调用,因为数据成员a,b的值并没有得到初始化,这也是上面我为什么说使用malloc/free来处理C++的自定义类型不合适,其实不止自定义类型,标准库中凡是需要构造/析构的类型通通不合适。至于malloc,它并知道你在这块内存上要放的数组还是啥别的东西,反正它就给你一块原始的内存,在给你个内存的地址就完事。转载 2023-02-14 11:15:48 · 145 阅读 · 0 评论 -
数据区、栈区、堆区、代码区
3.数据区(data seg):也称全局区或者静态区,根据名称我们就应该知道用来存放一些全局的东西,比如我们经常用到的静态变量、全局变量等都会存放到数据区,此区域上的东西都被全局所共享。比如我们可以采取类名.的方式就可以访问到方法,这就是所谓的静态方法,存放到数据区的。此区域主要用来存放我们经常创建的对象、动态的申请的临时空间等。1.栈区(stack):由系统的编译器自动的释放,主要用来存放方法中的参数,一些临时的局部变量等,并且方法中的参数一般在操作完后,会由编译器自动的释放掉。转载 2022-11-04 15:43:27 · 1246 阅读 · 0 评论 -
C++-----reinterpret_cast
首先从英文字面的意思理解,interpret是“解释,诠释”的意思,加上前缀“re”,就是“重新诠释”的意思;cast在这里可以翻译成“转型”(在侯捷大大翻译的《深度探索C++对象模型》、《Effective C++(第三版)》中,cast都被翻译成了转型),这样整个词顺下来就是“重新诠释的转型”。我们知道变量在内存中是以“…0101…”二进制格式存储的,一个int型变量一般占用32个位(bit),参考下面的代码转载 2022-11-04 14:55:58 · 3172 阅读 · 0 评论 -
C语言哈希表uthash的使用方法详解(附下载链接)
uthash简介 由于C语言本身不存在哈希,但是当需要使用哈希表的时候自己构建哈希会异常复杂。因此,我们可以调用开源的第三方头文件,这只是一个头文件:uthash.h。我们需要做的就是将头文件复制到您的项目中,然后:#include "uthash.h"。由于uthash仅是头文件,因此没有可链接的库代码。 使用uthash添加,查找和删除通常是常数时间的操作,此哈希的目标是简约高效。它大约有1000行C。它会自动内联,因为它是作为宏实现的。 uthash还包括三个额外的头文件,主要提供..转载 2022-04-08 19:05:52 · 474 阅读 · 0 评论 -
堆与栈区别
堆与栈实际上是操作系统对进程占用的内存空间的两种管理方式,主要有如下几种区别:(1)管理方式不同。栈由操作系统自动分配释放,无需我们手动控制;堆的申请和释放工作由程序员控制,容易产生内存泄漏;(2)空间大小不同。每个进程拥有的栈大小要远远小于堆大小。理论上,进程可申请的堆大小为虚拟内存大小,进程栈的大小 64bits 的 Windows 默认 1MB,64bits 的 Linux 默认 10MB;(3)生长方向不同。堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低。(4)转载 2022-11-04 15:26:50 · 56 阅读 · 0 评论 -
逻辑运算符的短路性质
(表达式1)&&(表达式2) 如果表达式1为假,则表达式2不会进行运算,即表达式2“被短路”(表达式1)||(表达式2) 如果表达式1为真,则表达式2不会进行运算,即表达式2“被短路”非:取反之意,如果条件为真,结果为假,如果条件为假,结果为真。^ 亦或:两个条件中,有且仅有一个为真,则结果为真,否则为假;|| 或:两个条件中,至少有一个为真,则结果为真,否则为假;&& 与:两个条件中,两个同时为真,则结果为真,否则为假;转载 2023-01-14 18:16:24 · 1438 阅读 · 0 评论 -
C++类定义中名字的查找规则
在类中的名字查找,主要是成员函数函数体中名字的查找,根据成员函数的定义位置,名字的查找规则稍微有点区别。转载 2022-11-05 15:37:58 · 138 阅读 · 0 评论