c++
文章平均质量分 77
KOwzb
因为很想得到,所以努力得到、、、、、
展开
-
零拷贝(Zero Copy)
一、零拷贝简介零拷贝指的是,从一个存储区域到另一个存储区域的copy任务没有CPU参与。零拷贝通常用于网络文件传输,以减少CPU消耗和内存带宽占用,减少用户空间(用户可以操作的内存缓存区域)与CPU内核空间(CPU可以操作的内存缓存区域及寄存器)的拷贝过程,减少用户上下文(用户状态环境)与CPU内核上下文(CPU内核状态环境)间的切换,提高系统效率二、传统拷贝方式DMA控制器Direct Memory Access,直接内存存取。ALU算术逻辑运算器发生4次空间切换(1、4、5、7),发原创 2021-05-06 20:34:18 · 2755 阅读 · 0 评论 -
C++11新特性学习
什么是C+11C++11标准为C++编程语言的第三个官方标准,正式名叫ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++。在正式标准发布前,原名C++0x。它将取代C++标准第二版ISO/IEC 14882:2003 - Programming languages -- C++成为C++语言新标准。C++11是对目前C++语言的扩展和修正, C++11不仅包含核心语言的新机能,而且扩展了C++的标准程原创 2021-04-15 19:19:28 · 390 阅读 · 0 评论 -
C++之类型萃取技巧
使用类型萃取的原因就是当你的顺序表是自定义类型,我们进行顺序表增容的时候,这个时候会出现一个问题,比如string类型,这个类型中有一个_buf与_ptr,当储存少于16个的时候这时会储存在_buf当中的,如果多于16个,那个会单独开辟空间,进行储存,这时拷贝的时候就是拷贝过去这个储存的地址而已,所以这样调用析构函数的时候,当增加容量的时候,这个时候会把储存string的那块空间进行释放。会造成数据丢失的问题。所以,在这里面我们提到一个类型萃取的技巧,可以把自定义类型和内置类型的区分开...原创 2021-04-06 23:05:01 · 237 阅读 · 0 评论 -
C++模板的那丢丢事儿
一、模板的引入首先,请你认真思考一个问题,如何编写一个通用的加法函数呢?1.对于我来说,首先第一反应是写一个宏函数来实现此功能,如:#define ADD(x,y) ((x) + (y))那么,这样写的缺点是什么呢?(1)它没有参数检测,这个原因致使它能够完成该要求,同时也造就了它致命的缺陷,不能进行参数检测,故安全性不高。(2)它不能像函数一样进行调试,而仅仅是在编译期间进行简单的参数替换,况且如果代码过长,会大幅增加代码量。(3)宏函数可能会有副作用,在不该替换的时候进行替换原创 2021-04-06 22:57:57 · 225 阅读 · 0 评论 -
map,multimap,unordered_map,unordered_multimap的详解
1,map简介map是STL的一个关联容器,它提供一对一的hash。第一个可以称为关键字(key),每个关键字只能在map中出现一次; 第二个可能称为该关键字的值(value);map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。在map内部所有的数据都是有序的,后边我们会见识到有序的好处。比如一个班级中,每个学生的学号跟他的姓名就存在著一对一原创 2021-04-06 21:33:23 · 892 阅读 · 0 评论 -
c++实现单例类(懒汉与饿汉)
教科书里的单例模式 我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例。 上代码: 1234567原创 2017-07-29 13:08:21 · 490 阅读 · 0 评论 -
c语言实现c++的继承和多态
继承和多态是C++的特性,它C语言没有这个特性。C++的三大特性:继承,多态,封装。继承:分为公有(public)继承,私有(private)继承,保护(protected)继承。用struct来模拟实现,因为struct在C和C++中都能可以使用,在C中称为结构体在C++中称为类,但他们的原理是一样的,又因为struct的限定符默认是公有的,在C中没有限定符这个概念,所以原创 2017-07-29 10:48:26 · 480 阅读 · 0 评论 -
内存泄露的原因
引起内存溢出的原因有很多种,常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产生过多重复的对象实体; 4.使用的第三方软件中的BUG; 5.启动参数内存值设定的过小; 内存溢出的解决方案:第一步,修改JVM启动参数,直接增加原创 2017-08-14 10:57:31 · 550 阅读 · 0 评论 -
open,write,read与fopen,fwrite,fread的区别
open:系统调用,返回的是文件描述符,即文件句柄,是文件在文件描述副表里的索引。fopen:C语言库函数,返回的是一个指向文件结构的指针。fopen是ANSI C标准中的C语言库函数,在不同的操作系统中应该调用不同的内核API,UNIX环境下,fopen是对open的封装。文件描述符是UNIX/Linux下的一个概念,linux环境下,一切设备皆是文件,一切设备皆是以文件的形式进原创 2017-08-11 12:24:22 · 570 阅读 · 0 评论 -
STL内存分配
1. Stl内存创建基类模板__malloc_alloc_templateSTL的常用的内存创建参考文件: stl_alloc.h,文件中定义了__malloc_alloc_template模板库,创建与释放使用C方法malloc、free、realloc,模板库里面主要对外提供了函数:allocate: 分配内存deallocate: 释放内存reall转载 2017-08-11 12:00:39 · 323 阅读 · 0 评论 -
智能指针
一、为什么要引入智能指针? 我们知道,C++中的动态内存需要用户自己来维护,动态开辟的空间,在出函数作用域或者程序正常退出前必须释放掉,否则会造成内存泄露,虽然有时我们已经非常谨慎了,然而当代吗比较长或比较复杂时,我们仍然可能忘记释放,正所谓防不胜防,一起看一段代码:[cpp] view plain copy void Fu原创 2017-07-25 11:19:13 · 365 阅读 · 0 评论 -
vector的实现
#include #include using namespace std; //类型萃取 struct TrueType { bool Get() { return true; } }; struct FalseType { bool Get()原创 2017-07-20 08:38:33 · 281 阅读 · 0 评论 -
bitmap
首先先看一下下面这个腾讯的面试题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 【腾讯】思路一: 最容易想到的解法就是遍历所有的40多亿个整数,然后一个一个判断。但是这个需要花费的内存是多大呢? 大家可以去算一下,这里我就直接给出结果为16G,是不是需要的空间很大啊。如原创 2017-06-23 10:11:48 · 302 阅读 · 0 评论 -
STL容器的总结
一、vector:简单,允许随机存储,数据的存取十分灵活,在缺省情况下应该使用。1、在使用vector的时候,需要有一点注意:尽量少使用erase,因为在发生erase的时候,会发生一次拷贝,vector要保持结构的完整性,会把从操作对象后的每一个成员都进行一次拷贝,并前移一位,但是在最后一个成员发生移动的时候,如果成员是一个非常规类型,会发生析构,那该成员以及该成员的拷贝都将被删除。关于re原创 2017-06-23 09:47:20 · 302 阅读 · 0 评论 -
String 的实现
#include#include#includeusing namespace std;class String{public : String(char* str="") { _size=strlen(str); _capacity=_size+1; _str=(char*)malloc(sizeof(char)*_capacit原创 2017-05-29 18:01:57 · 282 阅读 · 0 评论