自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (2)
  • 收藏
  • 关注

原创 【超越条件变量】多生产者,单消费者,最节约唤醒API调用的方案。2020-5-29升级版。

三态解决生产者 唤醒 消费者的系统调用消耗消费者:生产者:准备数据放入队列Test:cas(空闲态→工作态) 并判断原状态工作态:OK,消费者本来就在工作态,所以数据必将被处理检查态:消费者可能已经在Check之前或之后,此时应当堵塞直到脱离检查态以后再跳转到 Test重试。a) (进一步优化使多个生产者只有一个堵塞)。b) (进一步优化加多检查态1、2、3……使得生产者堵塞...

2019-10-22 19:52:13 317

原创 c++ 参数类型不同修饰(const/volatile/&/&&)的函数重载优先级

测试方法: 写出如下特化类,然后尝试调用print(),如果编译器报调用不明确,那么表示当前级别有多个重载函数,把被提示的重载全部注释,编译器会提示下一组,如果当前级别仅有一个重载,则编译器会在连接阶段报符号未定义,也把这个未定义函数注释掉。最后编译器会到达void foo(...){},则已经穷尽了所有匹配。测试编译器:VS2022 c++latest。

2024-02-08 12:00:11 227

原创 子进程继承了内存映射mmap导致flock文件锁泄露

想要利用文件锁在进程退出时自动释放的机制,让守护进程管擦某些资源的释放,并执行相关清理/重启工作。然而发现守护进程在父进程退出时永远饿死。主进程在等待键盘输入后关闭文件或不关闭文件立即退出,或③ctrl c。通过lsof、lslock等查看发现仅有子进程对此锁文件有关,并且堵塞于取得写锁中。子进程必须先munmap文件,才能真正释放从父进程继承下来的锁。安装信号捕获,每当有信号时print并退出,对子进程也生效。根据键盘输入,①close文件再等待②直接退出进程。父进程退出后,子进程堵塞无法继续。

2024-01-03 11:28:09 388

原创 【原创总结】字符串复制写法

strcpy strncpy strlcpy memccpy 等字符串复制函数的总结

2022-02-16 21:48:36 201

转载 区间问题求解

备忘转自 知乎 动画详解难啃的线段树

2021-04-18 18:11:43 155

原创 在gcc编译器上谨记加上-fwrapv防止编译器不考虑整数环绕

#include <stdint.h>#include <utility>#include <stdio.h>#include <stdlib.h>int calc_hash(signed char *s){ static const int N = 100003; int ret = 1; while (*s) { ret = (ret * 131 + *s); ++ s;

2021-04-16 03:08:37 716 1

原创 基于多继承的Tuple

多继承Tuple(加快编译速度),实现按序号Get成员,按序号得到成员类型Type#include <stdint.h>#include <utility>namespace NTuple{template<typename T, std::size_t index>struct Elem;template<std::size_t index, typename T>T& Get(Elem<T, index>&

2021-03-30 21:40:04 139

原创 强制noinline地调用目标函数 O2/3 兼容gcc clang msvc icc

#ifdef __clang__#define CallNoInline(f) (decltype(&f) ((intptr_t)f - 1 + 1))#elif defined(_MSC_VER)#define CallNoInline(f) (decltype(&f) ((intptr_t)f - 1 + 1))#elif defined(__ICC)template<typename T> auto ____get(T* p) { return p;}#defi

2021-01-01 11:08:18 312

原创 商城商品3层选项算法再优化

速度提高几百倍,记一次数据结构在实际工作中的运用上文描述了商品3层选项 尺码-颜色-性别,实现的性能优化过程。我在知乎看到其转载,发现有可以继续改进的方案。商品各选项分别编码,然后hashcode = a * B * C + b * C + c。可以建立一个表F,其元素值为二进制位的集合,可以用数值或字符串(因为这是js所以数据结构上不大方便)实现对于所有(a,b,c)元素,其位标志位f = (1<<(a+B+C)) | (1<< (b+C)) | (1<<c

2020-12-28 02:26:12 160

原创 LeetCode 236. 二叉树的最近公共祖先 极限性能 0ms 6.7MB 击败10000%

LeetCode 236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”LeetCode题解:C++非递归算法,4ms打败100%,比99%实现的代码还快50倍执行用时:4 ms, 在所有 C++ 提交中击败了100.00%的用户内存消耗:14 MB, 在所有 C++ 提交中击败了

2020-12-15 02:35:49 186

原创 JZ20包含min函数的栈,特殊独家解法:转义符栈

http://www.nowcoder.com/questionTerminal/4c776177d2c04c2494f2555c9fcc1e49题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。题目解读:实现一个支持push, pop, top, min的栈。这题传统解决就是双栈或者单栈但每个元素为{值,当前旧值},但这种方案需要双倍空间本人另辟蹊径,使用转移符思路,在单栈中,通过转移符存入额外控制数据,空间复杂度约等于O(N),每个新的

2020-09-04 08:36:56 344

转载 开源协议区分图

2020-05-26 02:30:59 123

原创 1、2线程中,无竞争的原子操作的性能

for (int j = 0; j < 10; ++j) { if (j == 3) //第3+1轮开启一个读线程读A { puts("以下开启线程 read A-------------------"); std::thread ([pA = &valueA, pB = &valueB, pC = &valueC]() { ...

2020-05-21 20:52:07 422 6

原创 快速评估2D整数坐标距离【3次加强版】

参见http://blog.sina.com.cn/s/blog_476a25110100maem.html在其基础上int FastDistance2D(int x, int y){x = abs(x);y = abs(y);int mn = min(x, y);return(x + y - (mn >> 1) - (mn >> 2) + (mn >> 4));}// min(x, y) 应小于intmax / 11,否则会出错int FastDi

2020-05-19 06:12:32 319

原创 一句话区别不同排序

选择:从未排序数据中找到应当放在第I位置的数据,放入第I位置(通过交换二者)。插入:从未排序数据中第一个,插入到已排序数据快排:区间中取一个标准,随后每个元素大于的放右游标处(然后游标左移),小于的放左游标处(然后游标右移);随后分别对左~左游标,右游标-右,进行递归调用。归并:非原地归并需要O(N)空间,原地归并时间复杂度O((logN)²N )希尔:将数组,元素下标除以delta按余数...

2020-05-01 22:58:30 194

转载 C# Log2和popcount内部实现

/// <summary> /// Returns the integer (floor) log of the specified value, base 2. /// Note that by convention, input value 0 returns 0 since Log(0) is undefined. ...

2020-03-30 16:58:26 380

转载 [转载]《对话守则》

1989年,捷克知识分子哈维尔等人,在布拉格成立了“公民论坛”,制定8条《对话守则》,在街头巷尾张贴,内容是:1、对话的目的是寻求真理,不是为了斗争。2、不做人身攻击。3、保持主题。4、辩论时要用证据。5、不要坚持错误不改。6、要分清对话与只准自己讲话的区别。7、对话要有记录。8、尽量理解对方。遵守这样的对话规则,对话才有效。...

2019-11-20 21:41:20 142

原创 redis不采用红黑树而采用了跳表skiplist的【真正】原因

唯一原因:代码简单,c语言里要实现一个类似c++里的std::multimap必须付出巨大的努力,redis的作者可懒得写就用了代码简单的跳表。一小部分优势:从已查找到的起点开始顺序遍历的性能略微高于红黑树其他答案经常说redis的跳表有什么性能优势,不存在的,redis跳表实现的性能非常差,增删改查性能都比VisualStudio的红黑树差了4~5倍,只有从已知某个起点顺序遍历理论上会好一些...

2019-11-14 08:00:50 1248 3

原创 Windows Linux 与Fushsia的粗略对比

从操作系统的设计理念感觉Fuchsia可以成为21世纪的主流操作系统主题WindowsLinuxFushsia一切皆?ObjectFileObject内核偏微内核偏宏内核(偏)微内核事件同步对象Event,需要主动使用signal,被动调用函数结合的Object Signal模型不支持signal及可直接实现它的机制安全Object属...

2019-11-10 06:53:33 248 1

原创 弱一致性cpu两个线程间传递new的对象的可见性问题

已知A线程:设置a,再设置pA = &aB线程:等待pA有效后,再对* pA访问在x86下可以保证B线程取得a的最新值,但其他更弱一致性的cpu(arm,powerpc)无这种保证,几乎是会出错的。上面还是比较容易理解的但是如果延伸一步:A线程:pA = new {5}B线程:等待pA有效后,再对*pA访问在弱一致性cpu上是否能保证正确呢?对pA的赋值是否应当使用atom...

2019-11-07 13:00:25 165 1

原创 测试cache在cpu之间移动耗时,及其他原子操作

cpu E3 1230v2 8核 3.3GHz struct Item { int32_t value = 0; // uint64_t _[(64 - sizeof(uint32_t)) / sizeof(uint64_t)]; }; //static_assert(sizeof(Item) == 64); enum { ...

2019-10-27 16:53:34 518 11

原创 纪录|寻路性能

红蓝绿三组寻路,亮的是平滑(缩进)后的。近距离0.1ms+平滑0.2ms640²地图对角寻路0.2ms+4.4ms

2019-10-22 03:32:11 216

原创 c++泛型库罕见编写注意事项

由于operator,逗号运算符 重载存在,泛型库对于 if ( A(), 123) 这样的逗号连接表达式应在中间插入(void),如 A(), (void), 213。由于operator& 取址运算符 重载存在,泛型库应使用std::addressof取地址...

2019-10-19 18:09:10 146

原创 VS内存泄漏检测手工代码

手工版泄露检测,用法,平时用d_new替换普通new的均会被检测,注意placement new不要替换性能:每次d_new和任何delete都要查表,估计是很慢的。强类型调试器可随时查看输出可以跳转到源码(补充代码可以实现快照对比,只需要复制和STL集合运算即可)(理论上可以一个类型一个map,这里先不实现了)限制:用了static inline变量,需要C++17,(理论上可以...

2019-10-19 17:38:29 288

原创 缓存着色 Page color测试

根据7个示例科普CPU CACHE测试缓存着色E3 1230v2, L2缓存:4256KB 8way (1MB)cacheline 64B,页大小64KB,1页含有1024cacheline。set数量=1MB/64/8=2048.根据文中所述,2KB64=128K,(理解不够深,不晓得算对没有)每128K的物理内存会映射到同一个cache slot上竞争,这个slot容量是8....

2019-10-18 23:57:20 678

原创 [C++17] 判定类型能否执行指定表达式

template<typename A, typename B, typename = void> struct is_equal_comparable : std::false_type {}; template<typename A, typename B> struct is_equal_comparable<A, B, ...

2019-10-18 20:34:39 136

转载 tcp cork quickack

以下均为转载摘录https://blog.csdn.net/u011006622/article/details/81086439Delayed Ack 为什么是40ms?这个时间能不能调整呢?首先在redhat的官方文档中,有如下说明:一些应用在发送小的报文时,可能会因为TCP的Delayed Ack机制,导致一定的延迟。其值默认为40ms。可以通过修改tcp_delack_min,调...

2019-10-18 00:23:08 179

原创 SQL插入100万个自然数

SQL插入100万个自然数到表(id为主键)方案一with Result as(select aaa.col*100000+ aa.col*10000+ a.col*1000+b.col*100+c.col*10+d.col+1 as colfrom (select 0 as col union all select 1 union all select 2 union all sel...

2019-10-17 17:09:12 537

转载 git教程

https://www.atlassian.com/git/tutorials

2019-10-07 02:00:19 91

转载 B 站基于大仓库的 CI/CD 及微服务实践

https://cloud.tencent.com/developer/article/1400337作者简介毛剑 B站 平台架构师&EP负责人Agenda我是在大概2015年的时候加入B站,之前是负责整个B站的后端,大概在2018年的时候转架构师,监管一个EP的团队。其实之前虽然没有做EP的一些事情,但是在转团队的时候,其实也进行了这样的实践。自己也有一些想法,如何快速交付、如何...

2019-10-07 01:42:57 239

原创 C++表达式值分类(左右值等)

prvalue = 纯右值 = (C++17) “初始化”prvalue----temporary materialization conversion 临时物化------>glvaluelvalue = 左值=有身份,不能被移动rvalue = 右值=能被移动glvalue = 广义左值=有身份的xvalue = 混合=有身份,也能被移动...

2019-10-05 07:14:47 640

原创 VS2019中使用char8_t编程后,代码兼容2017的方法

介绍:由于VS2019中启用了char8_t,decltype(u8"字符串") 是 const char8_t(&)[ N ],导致许多代码需要变更。然而一旦变更后,回到VS2017中反而会因为重载和模板匹配的问题导致错误,这就需要一些兼容机制来处理移植问题。一个是https://github.com/tahonermann/char8_t-remediation。用法不太清楚。...

2019-10-04 06:12:54 1926

原创 纪录|多写单读并发流与cameron、tbb并发队列性能对比

我的作品ConcurrencyWriteStream,提供多线程写单线程读+多线程探测有无数据的功能,其元素不定长,可用于直接存储多类型lambda作为异步任务调度核心。cameron似乎是目前网络上最优化的并发队列,提供了多(线程)写多读并发功能,其元素为泛型T。tbb的concurrent_queue与其类似。boost的并发队列各方面性能都不如tbb,因此性能数据不列出。(以下单位均...

2019-10-02 12:22:07 674

原创 游戏排行榜最优算法-字典树。与超快速跳表、redis跳表性能对比。

如果使用数据库,毫无疑问redis的有序集合(基于跳表)是最简单的一般来讲很多文章也会推荐跳表skiplist但是由于战力可转化为整数数值存储,论本地内存计算的数据结构,当属字典树最优标准树容器都不支持容器内节点的字典序的距离差计算,但其实自己改造树是可以的实现的:每个分支记录分支下元素总数,每当有元素插入删除时,更新其所有祖先上的数量记录,用时O(层数)=O(log(N))(4、8、16...

2019-09-30 15:29:21 1032

原创 C++自带或简单代码的随机数发生器性能

C++自带或简单代码的随机数发生器性能:1亿次生成minstd(32位) 1045msmt19937(32位,需要5000字节存储) 640msrand(VS 15位) 3089msJKISS32(32位) 218mslfsr113_Bits(32位) 375msunsigned int JKISS32() {static unsigned int x = 123456789, ...

2019-09-23 08:31:43 355

原创 Ronimo编程风格指南(的我的修改版)

原Ronimo编程风格指南的译文在http://gad.qq.com/program/translateview/7213889译者: 刘超(君临天下)这里根据情况进行了修改Ronimo(修改版)编程风格指南每一个规则都有例外。但是,尽可能的对于所有的代码保持固定的布局和风格。绝大多数是很难接受的,固定的编程风格需要一个人舍弃自己的风格来遵守这些规则。一旦习惯了...

2019-03-30 15:03:56 149

原创 我所理解的数据驱动

这里讲的数据驱动指的是程序开发或工作流程等领域的。数据驱动似乎不是一个大众统一认识(像过程式开发那样)的名词,也许不同人有不同理解,我是这么理解的:数据驱动:当需要完成一个任务,完成任务的的方法是修改一些数据,这些数据的修改将会触发一系列链式反应(可能会修改其他数据),直到任务完成。界面开发中的MVVM就是数据驱动。事件驱动:当需要完成一个任务时,调用一些函数或方法,导致其他对象所监视的事件...

2019-03-30 08:45:03 858

原创 linux和windows下各计时方法的大致性能与精度

rdtsc指令读取cpu内置tsc,有constant和nonstop tsc两种额外特性,一般认为几年前的cpu已经都会支持,然而云服务器(HyperV虚拟机)没这特性。cpu没有提供获取rdtsc的单位的指令。另外想要windows下想要地获取tsc的频率恐怕只有读注册表一种稳定途径,而且精度是MHz,很差。想要用rdtsc代替timeGetTime基本上很困难,只能乖乖用QueryP...

2019-03-22 02:34:26 471

原创 UBuntu源码安装clang llvm-link libcxx,及VSCode & CMake & Clang全套编译体系

(Ubuntu16)源码安装clang llvm-link libcxx libcxxabi,直接下载预编译的安装libcxx和libcxxabi好像要手动,所以放弃了先进入某个目录,先sudo输过密码,再粘贴下面的命令[ -e llvm-7.0.1.src.tar.xz ] || wget http://releases.llvm.org/7.0.1/llvm-7.0.1.src.tar...

2019-03-20 01:14:26 1015

转载 VS 可替换弱符号 转自stackflow(没试验过)

一般情况 __declspec(selectany) 够用,在需要符号替换的时候,参考下面的Visual Studio中的GCC样式弱链接?/* * pWeakValue MUST be an extern const variable, which will be aliased to * pDefaultWeakValue if no real user definition is p...

2019-03-20 00:38:04 354

WPFDump! 1.0 superzmy升级版源代码

用它来看WPF控件或自己输入的xaml代码的各种template和style,包括各级子控件属性全部都可以看 有了它你,你能更方便的学到很多东西啊 我自己写的,经常用它…… 内含源代码

2011-06-20

WPFDump! superzmy升级版 1.0 执行程序

这个工具可以用于查看WPF原生控件的模板和风格的属性! 也可以自己写一段代码来查看,可以看到控件内部的子控件的模板和风格,有了它,你的WPF技术能快速飞跃,从此不再烦恼~我就是靠着它学过来的。 这是我自一个外文版改进了很多以后的得来的! 里面没有源代码,源代码另外下,是写在4.0下,不知道能不能在3.5下运行,虽然编译了两个版本,虚拟机XP 4.0测试通过~

2011-06-20

空空如也

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

TA关注的人

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