C/C++
文章平均质量分 92
weixin_44135544
这个作者很懒,什么都没留下…
展开
-
大小端判断(使用联合)
大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。int checkSystem(){ union check { int i; char ch; } c; c.i = 1; return (c.ch == 1);//大端返...原创 2019-12-01 10:54:05 · 119 阅读 · 0 评论 -
深入理解内联函数
文章目录简介旧标准的内联新标准的内联正确地使用内联简介 内联函数,看起来像是函数,运作起来像是函数,比宏要好得多(宏没有错误检查等缺点),使用时还不需要承担函数调用的开销。基本思想: 将每个函数调用以它的代码来替换。 但这种做法很可能会增加整个目标代码的体积。在一台内存有限的计算机里,过分地使用内联所产生的程序会因为有太大的体积导致可用空间不够。即使可以使用虚拟内存,内联造成的代码...原创 2019-11-19 17:28:50 · 172 阅读 · 0 评论 -
深入理解C++迭代器
文章目录1.简介1.简介迭代器是一种行为类似指针的对象,而指针的各种行为中最常见也最重要的便是内容提领(间接访问)和成员访问(直接访问)。因此,迭代器最重要的编程工作就是对operator* 和operator->进行重载工作。...原创 2019-11-05 21:47:43 · 367 阅读 · 0 评论 -
实现自己的operator new和operator delete以及实现一个简单的内存池管理类
为什么有必要写自己的operator new和operator delete?为了效率。缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特定的场合下,可以进一步改善它的性能。当调用operator new来分配对象时,得到的内存可能要比存储这个对象所需的要多。因为operator new和operator delete之间需要传递信息...原创 2019-11-03 18:32:07 · 154 阅读 · 0 评论 -
C++之set_new_handler函数(Effective C++ 条款7)
作用预先准备好内存不足的情况。当内存分配请求不能满足时,调用你预先指定的一个出错处理函数。这个方法基于一个常规,即当 operator new 不能满足请求时,会在抛出异常之前调用客户指定的一个出错处理函数——一般称为 new-handler 函数。定义和解析指定出错处理函数时要用到 set_new_handler 函数,它在头文件里大致是象下面这样定义的:typedef void...原创 2019-11-02 11:44:36 · 442 阅读 · 0 评论 -
C++之简单实现stack
简介stack是配接器:一种用来修饰容器(containers)或仿函式(functors)或迭代器(iterators)接口的东西stack在源码中底层是deque,由于deque还没写,刚写了list,就用list来实现stack。环境:VS2017list迭代器#pragma once#include <iostream>using std::cout;...原创 2019-11-01 10:03:06 · 327 阅读 · 0 评论 -
C++之简单实现List
迭代器类实现#pragma once#include <iostream>using std::cout;using std::cerr;using std::endl;namespace HN{ template<typename T> struct hn_list_node;//下边要用到,所以先声明,仅声明模板使用extern报错,原因未知 te...原创 2019-10-31 09:58:31 · 477 阅读 · 0 评论 -
C++之简单实现vector
代码实现此处实现直接放在了头文件中环境:VS2017#pragma once#include <iostream>using std::cout;using std::endl;using std::cerr;template<typename T>class hn_vector{public: //构造函数 hn_vector(int size...原创 2019-10-29 12:02:48 · 367 阅读 · 0 评论 -
深入理解C++空间配置器
文章目录1、简介标准空间配置器2、具备次配置力的SGI空间配置器2.1 SGI标准空间配置器std::allocator2.2 SGI特殊的空间配置器 std::alloc2.3 构造和析构2.4 空间的配置与释放 std::alloc3、一二级空间配置器剖析3.1 第一级配置器__malloc_alloc_template剖析3.2 第二级配置器__default_alloc_template剖...原创 2019-10-28 18:35:40 · 356 阅读 · 0 评论 -
深入理解C++定位new
简介 一般的new运算符负责在heap堆中找到一个足以能够满足要求的内存块。new运算符还有另一种变体:定位new运算符(placement new),它能够让程序员指定要使用的位置。既将new运算符用于提供了的地址。定位new运算符在头文件中。定位new运算符直接使用传递给它的地址,它不负责判断哪些内存单元已被使用,也不查找未使用的内存块。这将一些内存管理的负担交给了程序员。一...原创 2019-10-28 11:08:12 · 391 阅读 · 0 评论 -
C++基础系列之六
纯虚函数:在函数形参表后面写上 =0 以指定纯虚函数无需定义,若要定义只能在类的外部该函数为后代类型提供了可以覆盖的接口,但这个类中绝对不会调用,最重要的是用户不能创建含有纯虚函数的类(抽象基类)的对象。虚函数的默认实参:谁调用就用谁的默认实参,但最好将其默认实参值设为相同的句柄类:定义包装句柄类存储和管理基类指针,指针所指对象的类型可以变化,它既可以指向基类类型对象又可以指向派...原创 2019-10-21 09:36:33 · 112 阅读 · 0 评论 -
C++基础系列之五
在赋值运算符中使用swap:H& H::operator=(H rhs){swap(this,rhs);return this;}使用swap将本对象和rhs交换,当赋值运算符结束后,rhs被销毁他自动处理了自赋值情况且天然就是异常安全的右值引用:&&只能绑定到一个将要销毁的对象指针成员:复制指针时只复制指针中的地址,而不会复制指针指向的对象。管理...原创 2019-10-20 22:15:18 · 59 阅读 · 0 评论 -
C++基础系列之四
常量成员函数:double avg_price() const;const 成员不能改变其所操作的对象的数据成员。const 必须同时出现在声明和定义中,若只出现在其中一处,就会出现一个编译时错误。成员函数重载只能重载本类的其他成员函数。类的成员函数与普通的非成员函数以及在其他类中声明的函数不相关,也不能重载它们。不完整类型:在声明之后,定义之前,是一个不完整类型,不能定义该类型的...原创 2019-10-18 18:03:15 · 66 阅读 · 0 评论 -
C++基础系列之三
智能指针:shared_ptr:允许多个指针指向同一个对象unique_ptr:独占所指向的对象shared_ptr:shared_ptr<类型> p;//可以指向某种指定类型 p.get(); //返回p中保存得指针(内置指针),不能delete该指针不要使用get初始化另一个智能指针或给另一个智能指针赋值p.swap(q); //交换指针make_share...原创 2019-10-18 17:09:45 · 65 阅读 · 0 评论 -
C++基础系列之二
可变形参:initializer_list lint:void f(initializer_list ls){for(auto elem:ls){cout<<elem<<endl;}}调用:f({“wo”,“ni”,“ma”})类似vector,但值永远是常量值省略符形参:void f(…)返回列表:vector f(){return {“w...原创 2019-10-18 16:02:42 · 86 阅读 · 0 评论 -
C++基础系列之一
volatile: 当可以用编译器的控制或检测之外的方式改变对象值的时候,当声明为volatile,给编译器 的指示是这样的对象不应该执行优化。extern “C” 必须出现在函数的第一次声明上,extern “C” 函数 编译器按照处理C语言的方式处理代码 extern “C” double calc(){}; C语言不支持重载,若链接多个C++重载函数...原创 2019-10-18 11:52:28 · 87 阅读 · 0 评论 -
简单解释为什么需要申请内存
假设A和B公司都需要一个程序录入学生的数据,你直接在程序上写,考虑未来用户的公司规模,你是不是直接写一个占用10000个空间的数据呢?A是家小公司,只有50个人,用户在使用时,只需50个人的数据内存空间就够了,而明明只有50条数据,你的程序却要在系统中多占用9950的内存资源。不论规模如何,这个程序都(只会)占用掉10000条数据的内存空间,不能再多,也不能再少。B是家大公司,有20000...原创 2019-10-18 09:52:43 · 1596 阅读 · 0 评论 -
编译过程详解
文章目录锲子预处理编译汇编链接锲子我们在各自的电脑上写下代码,得明白我们代码究竟是如何产生的,不想了解1,0什么的,但这几个环节必须掌握吧。我们的代码会经过这4个环节,从而形成最终文件,c语言作为编译语言,用来向计算机发出指令。让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。预处理 展开头文件/宏替换/去掉注释/条件编译 ...转载 2019-10-13 20:38:19 · 152 阅读 · 0 评论 -
深入理解内存对齐
内存物理构造内存的外形一般如下一个内存是由若干个内存颗粒构成的,每一个内存颗粒叫做一个chip,是由8个bank组成的。构造如图:而每一个bank是一个二维平面上的矩阵,矩阵的每一个元素都是保存一个字节,也就是8个bit。内存编址方式那么对于我们在应用程序中内存中地址连续的8个字节,例如0x0000-0x0007,直观感觉,应该是在第一个bank上吗? 其实不是的,程序员视角看起...原创 2019-10-13 19:13:44 · 155 阅读 · 0 评论