
C++
文章平均质量分 69
对不起我是一个厨子
Others tell you how ,I tell you why,,,,,,
展开
-
一个C/C++协程库的思考与实现之协程的简单调度
提供这样的协程使用接口,实在令人,,,0.0.1代码的accept协程只能写的这样丑陋,因为协程创建后立马调度执行占用了CPU,只有当协程读写网络IO将被阻塞时才会主动让出CPU,这时调度器会获得CPU,当有新连接到来时accept协程才会被调度器调度恢复执行,所以要在新创建一个协程前要先保存accept协程的上下文环境做为一个返回点,以便将来返回对于这么丑陋的代码我耿耿于怀,事实是我写代码的水平也确实不怎么样,确实丑陋但我还是想写出像创建多线程那样的代码,比如这样要写出..原创 2020-06-25 23:09:07 · 775 阅读 · 1 评论 -
C++复杂类型-对象及虚函数表在可执行文件的存放位置与初始化时机
C++复杂类型-对象及虚函数表在可执行文件的存放位置与初始化时机使用objdump -D -C反汇编-D会输出所有段,-C可以看到代码中的变量名rodata 只读数据段可看到只读数据段中有虚函数表(虚函数表的第一个4字节是空的,第二个4字节存放是typeinfo的地址,第三个4字节存放的是Test类的虚函数fun的地址),和用于RTTI的Test类的类型...原创 2020-05-01 13:31:12 · 543 阅读 · 1 评论 -
你知不知Java如何解析C++通过tcp socket传过来的结构体啊
你:知不知道Java如何解析C++通过TcpSocket传过来的结构体啊我:知道啊不久前,接到一个任务,使用Java写一个flume的TcpSource做为服务端,用于接收C++客户端程序发送的未序列化的C++结构体并解析成Java对象,要完成这个需求的开发,首先需要了解一点点,结构体内存对齐,字节填充,CPU大小端及网络字节序,然后就是一点点反汇编,会写点点C++ /Java代码,会简单的使...原创 2020-01-01 22:40:43 · 2439 阅读 · 9 评论 -
C++基本类型-变量在可执行文件中的存放位置及初始化时机
C++基本类型-变量在可执行文件中的存放位置及初始化时机环境如下如下代码使用objdump -D -C反汇编-D会输出所有段,-C可以输出变量名rodata 只读数据段只读数据段中存放了全局字符串常量char *f="123456"的值局部字符串常量char *k="abcdef"的值全局变量const int d=3...原创 2019-12-01 21:08:52 · 752 阅读 · 1 评论 -
基于共享内存的HashMap的思考
基于mmap共享内存实现既可用于多进程又可用于多线程的无需持久化的并发HashMap,我们就叫它SharedHashMap吧!基于mmap共享内存实现既可用于多进程又可用于多线程的无需持久化的并发SharedHashMap使用mmap把文件内容映射到进程的虚拟地址空间,在这块虚拟地址空间中实现一个HashMap每个进程都会使用mmap把Nodes文件做...原创 2019-08-28 13:11:41 · 1956 阅读 · 1 评论 -
c++中new与delete,new[]与delete[]
你不知道的c++之new与delete和new[]与delete[]有如下代码反汇编如下查看代码发现并没有什么不同因为int类型在c++中不是对象,在构造时不需要调用构造函数,销毁时不用调用析构函数,所以直接分配,回收空间就行了修改代码如下反汇编如下看到区别了?发现编译器在遇到非内置对象使用new和new[]与内置对象...原创 2019-07-09 21:15:52 · 215 阅读 · 0 评论 -
用指针去修改const变量的值
怎样修改c++中被const修饰的变量?你要知道的一点是,编译器在遇到const关键字修饰的变量后并没有在每次使用该变量的代码前插入检测代码,检测是否对其进行写入如果是则禁止对其修改,。其实是在编译期间编译器在遇到const声明的变量后会把此变量记录下来(我猜测的可能就是这样),比如表,每当遇到为一个变量赋值时就查表如果表中有此变量则给出警告(只是我猜测),而编译器也没有禁止我们对一个const变...原创 2015-09-21 15:46:32 · 1646 阅读 · 1 评论 -
C++函数调用之thiscall
C++函数调用之thiscall所有c++对象共享类中的一份代码拷贝,那c++是怎么实现对每个对象的数据的正确操作?这就要归功与c++的thiscall,C++会为每个类成员函数传递一个this指针即指向被操作对象的地址做为成员函数的隐含参数(被static修饰的除外)下面让我们来看看thiscall在c++中到底是怎么实现的,,,有如下代码查看反汇编代码原创 2015-09-09 20:20:00 · 4220 阅读 · 1 评论 -
误人子弟篇之C++为什么对引用变量取地址得到的是被引用变量的地址
C++引用编辑同义词@#Protect@#一般指C++引用引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;(1)&在此不是求地址运算,而是起标识作...原创 2015-10-22 10:54:01 · 13172 阅读 · 2 评论 -
C++之对象内存分配
C++之对象内存分配在c++中类在实例化一个对象时,只为对象分配了存放成员变量的空间,如果类中存在虚函数那么还会分配一个指针大小的空间去存放指向虚表指针现在让我们来看看在c++中编译器是怎样为对象分配空间的其实和为结构体分配空间是一样的,分配一块能容纳所有成员的空间,成员按类中声明出现的先后顺序以次排列放在空间中查看其反汇编代码会看到编译器在栈上为其分12个字节的空原创 2015-09-14 09:34:52 · 1259 阅读 · 1 评论 -
c语言与c++函数调用区别
c语言与c++函数调用区别有如下代码classfather{private:inta;public:father(intb){a=b;}voidADD(inta){}};voidadd(inta){};intmain(intargc,char*argv[]){fathera(1);a.ADD(1);add(1);r原创 2015-09-10 08:23:06 · 1262 阅读 · 1 评论 -
new与malloc()的区别
new与malloc()有什么区别在c语言中在堆上动态分配一块空间我们可以用malloc()等函数,在c++中我们可以用new,那么new与malloc()函数有什么不同?int*p,*qp=(int*)malloc(sizeof(int))q=newint可以看到1.malloc()函数的返回值要经过转换后才能使用而new可直接使用2.malloc()是个...原创 2015-09-10 08:48:20 · 887 阅读 · 0 评论