自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

啦啦啦

取法其上,得乎其中,取法其中,得乎其下,取法其下,法不得也

  • 博客(17)
  • 收藏
  • 关注

原创 线程简单实现

github地址https://github.com/FunctionDou/mythread/tree/master环境如果make之后出现无法编译的情况, 那么可能缺少了-m32条件的环境.解决缺少链接32位的环境, ubuntu中需要下载sudo apt-get install build-essential module-assistantsudo apt-get insta...

2019-01-17 21:45:46 353

原创 c++ 传递常量引用比传值更好

在c++中引入了引用, 而引用其实也就是指针, 只是使用起来更加的方便. 使用使用使得在函数传值时可以为对象创造一个别名, 操作时实际上就是操作原对象本身, 这样的传引用可以避免对象传递时产生临时对象. 这样避免就可以减少很多不必要的时间和空间的开销.实际例子以Effective C++条款20的例子来分析class Person { string name, address;pu...

2019-01-23 12:56:11 1734 2

原创 c++ 强制类型转换浅析

前言在c语言中学的强制转换是用()来实现的; 而在c++中更多的是用case-name系列的关键字来告诉编译器我们需要转换的类型. c++引入这些关键字也是为了看代码的时候清晰明了, 每个关键字都有指定的功能. 下面我们就来分析这些关键字.1. static_cast在编译期间完成类型转换.a. 将原有的自动类型转换 , 如 : short转为int, int转为double, 非cons...

2019-01-22 13:39:10 390

原创 c++ explicit关键字

在写类的构造函数时, 可能经常就会用到explicit关键字, 而它的具体作用就是 :只能用来修饰构造函数要求修饰的构造函数必须显示调用禁止隐式转换具体先来看一个例子:class ExplicitClass{ public: ExplicitClass(int size) : size(size) {} ExplicitClass(const char *str) : s...

2019-01-22 12:22:39 934

原创 c++ typeid操作符

前言在分析typeid之前, 先了解什么是RTTI(运行时类型识别). RTTI使程序能够获取由基指针(引用)所指向的对象的实际派生类型, 允许用指向基类的指针(引用)来操作对象并能够获取到这些指针(引用)所指对象的实际派生类型. c++具体支持typeid和dynamic_cast两个操作符.而typeid操作符用于返回对象的引用, 实际调用的是type_info标准库类型, 也在type...

2019-01-22 12:20:36 901

原创 c++对象的内存布局

类的内存分布引言大概有接近一年的时间没有怎么用过c++了, 大多数时间都在学习关于linux以及linux C的知识, 一直想总结一些c++的知识却总不知怎么写, 从哪里入手, 前几月重新整理了一些关于c++类的内存分布的验证实验就想着正好可以用于切入口。 毕竟我在学习c++的过程中, 是先清楚了类的内存分布才后明白RTTI, 多态的基本原理, 理清这些关于多态这些就不难理解了。环境这些实...

2019-01-22 12:12:04 835

原创 c++ 类的大小计算

前言一个空类的大小是多少? 0个字节还是一个字节?本节分析一个类的大小是多少, 怎么计算。 本节没有涉及类中有静态成员的情况, 后面会单独对静态成员做一个分析, 现在只要知道静态成员变量不在类的内存布局中。环境实验环境只要能编译运行的都可以, 只有86的环境指针的大小为4字节, 64环境指针大小是8字节。一个空类的大小一个空类也是有大小的, 其大小为1个字节。我们可以很简单的完成这个实验...

2019-01-22 12:08:36 632 2

原创 c++ 静态成员

前言类的静态成员有成员对象以及成员函数, 之所以将静态成员单独提出来, 就是因为它的特别, 静态成员对象并不在类的内存分布中, 而是在ELF中的.data段中, 是该类的每个实例化共享的资源; 同样静态成员函数也类似与普通函数, 函数体内只能直接操作静态成员对象.静态成员对象static成员对象是存储在data段中, 并不是直接存放在类中, 所以不能通过this访问到静态成员对象, 并且需要...

2019-01-22 12:05:59 326

原创 c++ 多态内存布局分析

前言上节对分析了多态的基本概念, 本节从内存布局的角度再来分析一下多态吧。单一继承的内存布局最开始我们分析了虚指针, 虚表, 但都只停留在单继承中, 现在我们在来扩展的探讨多重继承的内存布局#include <iostream>#include <stdlib.h>#include <cstring>#include <functional&

2019-01-22 12:04:08 1892

原创 c++ 虚函数和多态

前言多态简单的说就是一个接口多种状态(方法), 这很像端口复用. 这里先来从虚函数入手, 再来分析多态.虚函数在类中的函数以virtual开头的成员函数, 关键字virtual就是告诉编译器我们的这个函数是虚函数.virtual void print() { cout << "print"; }这就是一个虚函数, 只需要一个关键字就行了.下面分析会用到的例子class...

2019-01-22 12:01:46 499 2

原创 vs中c++类的内存分布调试环境

在vs中添加必要的命令就可以查看类的内存布局情况。右键项目或者项目某个文件, 选择属性在c++选项中选择命令行在其他选项中添加需要的命令, **如果你要看所有的类的内存布局, 添加/d1 reportAllClassLayout**即可如果你要看指定类的内存布局, 添加/d1 reportSingleClassLayoutXX, XX为类名。程序运行时, 在输出...

2019-01-22 11:59:34 610

原创 decltype类型推导

前言如果想要知道一个表达式的数据类型但又不想对表达式进行求值, 那么auto似乎就不满足这中要求, c++11加入了decltype操作符,它的功能与auto类似, 都是进行类型推导, 但是decltype就能对某一表达式的类型进行推导并且不求表达式的值.因为decltype在很多的时候并不同于auto操作符, 所以我会将大部分的不同罗列出来, 比如 : 数组, 顶层const等.declt...

2019-01-20 12:08:49 615

原创 auto类型推导

引言auto : 类型推导. 在使用c++的时候会经常使用, 就像在考虑STL时迭代器类型, 写模板的时候使用auto能少写代码, 也能帮助我们避免一些隐患的细节.auto初始化使用auto型别推导要求必须在定义时初始化, 毕竟需要根据对象的类型推导左值对象的型别.auto j; // error. 必须初始化auto i = 0; // i 推导型别为 intvector&lt...

2019-01-17 22:22:58 825

原创 线程-线程调用2

前言上一节我们用模仿函数调用的方法来实现了线程调用, 不过都是用汇编实现的, 而本节就来写用c语言来调用.线程调用1. 全局变量上节汇编中thread和current_thread都是被定义的全局变量, 使用全局变量是为了容易可以直接在汇编中调用.int thread[3] = {0}; // 定义3个线程int current_thread = 0; // 保存当前运行的线程2....

2019-01-17 21:50:07 442 1

原创 线程-线程调用1

前言上一节我们分析了函数调用主要是将rbp(栈基址寄存器)压栈最后函数退出后将其弹栈实现调用和恢复现场. 而本节我们再接再厉接着分析线程调用的过程.几个寄存器在我们写代码之前要先对基本的寄存器有一个了解, 毕竟待会我们会先写一段汇编代码, 所以必须对寄存器要有一个简单的了解.rsp : 栈顶寄存器. 它始终指向一个栈的顶部.rbp : 栈基址寄存器. 它是同rsp寄存器连用的, 因为r...

2019-01-17 21:49:04 545

原创 线程-函数调用

引言本专题是手动实现一个“线程”, 写这个项目的起因主要是为了为学习操作系统的人而准备的练手和巩固线程和进程调用的知识. 而这个小项目是从我所写的玩具操作系统中抽离出来再加以改善的, 所以并不乎涉及更加底层的东西, 毕竟我也不会.前言在讲解小项目之前要先明白什么是函数调用? 函数又是怎么实现调用并返回到调用函数的函数体中?可能你不明白为什么线程会跟函数调用有关, 那是因为我们实现的功能只是...

2019-01-17 21:47:28 2021 1

原创 VS17中字面值字符串问题

引言之前在windows中写const的总结, 在vs17中测试代码, 结果在测试字符串面值时出现了意料之外的错误.问题 char *str = "vs2017";这行代码在gcc中能够通过编译, 只是有一个警告 : warning: ISO C++ forbids converting a string constant to char* [-Wwrite-strings]但是在v...

2019-01-12 16:35:14 519

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除