![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++
山有木兮啊
这个作者很懒,什么都没留下…
展开
-
如何获取虚函数表及内存分析
虚函数表对于学习C++的没个人来说都不陌生,面试中也经常问到,但是虚函数表具体是什么东西呢?原创 2023-03-09 15:52:48 · 404 阅读 · 0 评论 -
模板静态成员变量需要使用才会构造
今天在写单例模式时,计划使用隐藏类的析构来释放内存,之前一直采用的注册方式(atexit)。但是在使用valgrind检测内存泄露时发现出现了error,之前使用注册方式从未出现。于是在隐藏类的析构加了printf,发现未输出,于是在构造又加了printf,发现也未输出。可想这个类没有发生构造,但是相比于其他静态变量,其他静态变量都是正常的,唯一的不同点在于这个隐藏类变量从未使用过。原创 2023-03-06 16:56:09 · 113 阅读 · 0 评论 -
c++11特性与c++17特性
作用类似union,但是比union更加方便。std::variant只包含模板参数中的一个类型的值,当转换为其他值时会抛出异常。std::string_view对指向的内容是只读的,其操作是对指针的偏移,所以性能比std::string高。编译期如果满足条件,则只对if的内容进行编译,省去else的编译,反之只编译else内容。std::variant是一个变参模板类,可以存放更多的类类型,而不仅限于基础类型。原创 2023-02-21 10:46:51 · 7044 阅读 · 0 评论 -
volatile不等于原子操作
1、volatile作用;2、volatile为什么不等于原子操作原创 2023-02-16 13:41:30 · 459 阅读 · 0 评论 -
C++设计新思维(泛型编程与设计模式之应用)之常整数映射为类别(2.4)
C++设计新思维(泛型编程与设计模式之应用)之常整数映射为类别原创 2023-01-23 15:57:47 · 634 阅读 · 0 评论 -
windows11编译autoconf版sqlite,版本3.38
windows11编译autoconf版sqlite,版本3.38原创 2023-01-20 09:54:17 · 383 阅读 · 0 评论 -
libco 宏分析
对libco中一些有趣的宏进行分析原创 2022-12-15 12:03:08 · 363 阅读 · 0 评论 -
封装红黑树代码-3 c++
封装红黑树代码-3原创 2022-12-06 09:17:35 · 289 阅读 · 0 评论 -
封装红黑树代码-2 c++
封装红黑树代码原创 2022-11-29 11:27:13 · 282 阅读 · 0 评论 -
std::shared_ptr<void> 为什么可以正常调用类的析构
std::shared_ptr 为什么可以正常调用类的析构原创 2022-11-22 17:05:58 · 772 阅读 · 0 评论 -
libutp使用
libutp的使用客户端通过stdin输入想要发送的内容,server端只显示收到内容,不会进行回复原创 2022-10-24 16:32:07 · 182 阅读 · 0 评论 -
通过汇编观察栈的创建与恢复
通过汇编观察栈的创建与恢复原创 2022-10-12 11:00:34 · 507 阅读 · 0 评论 -
C++引用与指针--从汇编层面来看
C++ 引用和指针原创 2022-10-09 11:12:54 · 269 阅读 · 0 评论 -
concurrentqueue源码阅读
concurrentqueue原创 2022-09-14 14:23:59 · 530 阅读 · 0 评论 -
基于std标准库的哈希函数实现的hashmap
hashmap实现原创 2022-09-01 11:39:36 · 279 阅读 · 0 评论 -
zip文件协议&gzip文件协议
zip及gzip协议原创 2022-08-19 16:39:10 · 1174 阅读 · 0 评论 -
zip文件协议解析
ZIP文件协议解析原创 2022-08-08 09:37:00 · 1715 阅读 · 0 评论 -
关于C如何像c++一样做private元素的探讨
关于C如何像c++一样做private元素的探讨原创 2022-07-25 13:54:53 · 396 阅读 · 0 评论 -
unordered_map的hash function及hash bucket存储方式探索
unordered_map的hash function及hash bucket存储方式探索。原创 2022-07-25 10:31:23 · 168 阅读 · 0 评论 -
C++ KCP异步多线程封装
KCP线程安全封装原创 2022-07-14 16:27:42 · 1331 阅读 · 0 评论 -
读libco保存恢复现场汇编代码
libco原创 2022-07-01 21:44:13 · 135 阅读 · 0 评论 -
谷歌glog日志格式修改
logging.ccglog的日志输出和格式化都在这个文件内,所以可以自行取看这个文件下面给出具体修改日志格式的方法,这样就可以做出自己喜欢风格的日志格式glog诟病的一点就是一个线程一个文件,其文件名的命名方式为perfix + 时间 + tid + ext其中可通过函数控制有perfix和extperfix(文件前缀): google::SetLogDestinationext(文件扩展名): google::SetLogFilenameExtension时间和tid想要修改就要去修改代码原创 2022-04-30 22:17:13 · 4602 阅读 · 0 评论 -
windows使用libevent
// udp recv#define _CRT_SECURE_NO_WARNINGS#define _WINSOCK_DEPRECATED_NO_WARNINGS#define _CRT_SECURE_NO_DEPRECATE#define _CRT_NONSTDC_NO_DEPRECATE#include <event/event.h>#include <event/event2/event.h>#include <errno.h>#include &原创 2022-04-18 10:00:40 · 840 阅读 · 0 评论 -
细节问题记录
1、当同一个系统非阻塞socket套接字往两个epoll放后,出现读事件时会是什么样子?// 测试代码原创 2022-04-11 10:32:37 · 2397 阅读 · 0 评论 -
epoll + 非阻塞IO + openssl
epoll搭配非阻塞IO可以更为高效。但openssl在搭配非阻塞IO时会使得SSL_read, SSL_accept等函数直接返回,导致无法连接上,而循环SSL_accept又会阻塞程序,因为你也不知道下一个连接是什么时候,故非阻塞IO在搭配openssl时较为艰难但是在采用epoll后,下一次连接到达时epoll会返回,由此可以确定有客户端想要建立连接,在此为什么不说是建立ssl连接呢?因为ssl连接和tcp不是一个概念,epoll只能确定的是由客户端想要建立tcp连接,如果程序在处理连接时死循环,原创 2022-03-17 10:25:41 · 4524 阅读 · 0 评论 -
std::bind是如何实现绑定成员函数的
非成员函数非成员函数可以用指针直接调用#include <iostream>#include <string>#include <functional>using namespace std;void NonMemFunc(){ std::cout << __func__ << "()" << std::endl;}int main(){ void (*f)() = NonMemFunc; f();原创 2022-03-07 17:53:46 · 1714 阅读 · 3 评论 -
ragel 解析http 响应
/************************************************************************* > File Name: main.rl > Author: hsz > Brief: > Created Time: Sun 06 Feb 2022 11:08:27 PM CST ************************************************************原创 2022-02-07 10:34:05 · 1354 阅读 · 0 评论 -
ragel 解析http 请求
http request"GET https://www.cnblogs.com/templets/new/script/jquery.snippet.js HTTP/1.1\r\n""Host: c.biancheng.net\r\n""Proxy-Connection: keep-alive\r\n""Pragma: no-cache\r\n""Cache-Control: no-cache\r\n""Accept: text/javascript, application/javascri原创 2022-02-03 13:26:14 · 1162 阅读 · 0 评论 -
ragel解析http url
#include <iostream>#include <string>using namespace std;%%{ # See RFC 3986: http://www.ietf.org/rfc/rfc3986.txt machine uri_parser; gen_delims = ":" | "/" | "?" | "#" | "[" | "]" | "@"; sub_delims = "!" | "$" | "&" |原创 2022-01-28 08:34:38 · 3008 阅读 · 0 评论 -
读爱奇艺开源协程项目—libfiber
1、libfiber介绍首先说下为什么要写这个博客,一是记录自己学习,二是防止学习后遗忘,这样即使忘了还可以通过博客来回忆起一个大概开源项目位置:https://github.com/iqiyi/libfiberlibfiber中文介绍:https://github.com/iqiyi/libfiber/blob/master/README_cn.md开源团队:爱奇艺相关协程的开源项目不少,boost,libco,libfiber等等协程的概念在此就不说了,不过协程的实现可以简单说下,我只看过l原创 2022-01-01 18:43:57 · 620 阅读 · 0 评论 -
Openssl-AES加密
AES加密算法此次介绍AES两种加密算法,其他的暂不使用1、ECB模式按照块密码的块大小被分为数个块,并对每个块进行独立加密。 优点: 1.简单; 2.有利于并行计算; 3.误差不会被传送; 缺点: 1.不能隐藏明文的模式; 2.可能对明文进行主动攻击;2、CBC模式:每个平文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有平文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。 优点: 1.不容易主动攻击原创 2021-12-27 18:00:38 · 3196 阅读 · 0 评论 -
类模板与继承
子类在继承父类时需明确父类的模板数据类型template<class T>class Base {public: Base() { std::cout << __func__ << "() 构造函数\n"; } ~Base() { std::cout << __func__ << "() 析构函数\n"; }private: T mMember;};//原创 2021-04-10 18:36:04 · 155 阅读 · 0 评论 -
指针常量,常量指针,引用常量
首先明确一点,<const从不修饰数据类型,其最常修饰的是变量,指针,引用>下面给出示例int num = 100;const int *ptr = # // 此时const修饰的是*,是一个指针常量,其解引用不能作为左值,// *ptr = 10; // error: assignment of read-only location ‘* ptr’// -----------------------------------------------------原创 2021-03-24 21:20:32 · 140 阅读 · 0 评论 -
类的大小以及虚函数表
一、类的大小一个类中,如果什么都没有,那么它所占的字节为1,如果在类中添加了一个函数(非虚函数),那么它的大小还是1,而如果是虚函数,那么对于32位系统来说是4字节,对于64位系统来说是8字节。二、虚函数类中函数前有virtual这类关键字,则此函数为虚函数。class Base{public: virtual ~Base();}Base::~Base();三、虚函数表Base类中存在虚函数,A继承Base类,那么这两个类都存在一个虚函数表。class A : public Bas转载 2020-07-13 11:48:26 · 1243 阅读 · 0 评论 -
explicit关键字解释
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String { String ( const char* p ); // 用C风格的字符串p作为初始化值 //…}String s1 = “hello”; //隐式转换,等价于String s1 = String(“hello”);但是有的时候可能...转载 2020-02-27 16:34:59 · 223 阅读 · 0 评论 -
malloc和free
malloc如何分配内存Linux由glibc内存管理–ptmalloc2来分配内存:ptmalloc2想了解更多可以点上面的链接,我就不在赘述。malloc函数返回一个void *指针,如下代码typedef struct person{ char name[16]; int age;}PERSON;PERSON *p1 = malloc(sizeof(PERSON))...原创 2019-10-27 15:07:47 · 183 阅读 · 0 评论 -
单向链表
LinkList.h#pragma once#pragma pack(1)#include <stdio.h>#include <string.h>#include <stdlib.h>#ifdef __cpulspulsextern "C" {#endif typedef struct linkNode { int Value;...原创 2019-10-24 10:33:17 · 168 阅读 · 0 评论 -
MFC加载背景图片后变模糊的原因
void CMFCApplication1Dlg::OnPaint(){ if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中...转载 2019-10-20 16:52:08 · 591 阅读 · 0 评论 -
Unicode UTF-8 ANSI
简介UnicodeUnicode 编码共有三种具体实现,分别为utf-8,utf-16,utf-32,其中utf-8占用一到四个字节,utf-16占用二或四个字节,utf-32占用四个字节。UTF-8UTF-8使用1~4字节为每个字符编码即:对于ANCII只需一个字节(0000~007F),与UTF-8相同;带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利...转载 2019-10-20 12:37:09 · 240 阅读 · 0 评论 -
C实现的小型的httpserver
/******************************************************* > File Name: test.c > Author: hsz > Mail: > Created Time: Fri 11 Oct 2019 09:42:44 PM CST **********************...原创 2019-10-18 16:28:24 · 308 阅读 · 0 评论