![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 90
横云断岭
在国内大型互联网公司负责6K+应用,80K+机器的Spring Boot微服务技术落地,关注开发体验,微服务,APM,应用诊断,dubbo开源。
Github: https://github.com/hengyunabc
展开
-
栈的实现的本质
堆和栈到底有什么区别?这个问题往往在面试中会被问到。栈和堆的从实现上来说,本质是一样的。栈的大小可以在编译时,或者线创建时指定。有空再补全。先贴个程序:通过进程管理器可以看到,在没有输入i之前,程序占用的内存是很小的,几百k,在输入i之后,程序占用内存不断上升,最终栈溢出,程序出错。#include using namespace std;int原创 2012-02-22 01:50:36 · 1397 阅读 · 0 评论 -
Java的LockSupport.park()实现分析
LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数: public native void unpark(Thread jthread); public native void park(boolean isAbsolute, long ti原创 2014-06-03 02:52:12 · 49758 阅读 · 17 评论 -
Memcached 二进制协议(BinaryProtocol) incr指令泄露内存数据的bug
缘起最近有个分布式限速的需求。支付宝的接口双11只允许每秒调用10次。单机的限速,自然是用google guava的RateLimiter。http://docs.guava-libraries.googlecode.com/git-history/master/javadoc/com/google/common/util/concurrent/RateLimiter.html原创 2014-11-07 20:19:14 · 5735 阅读 · 2 评论 -
并行编程之条件变量(posix condition variables)
在整理Java LockSupport.park()的东东,看到了个"Spurious wakeup",重新梳理下。首先来个《UNIX环境高级编程》里的例子:#include struct msg { struct msg *m_next; /* ... more stuff here ... */};struct msg *workq;pthread_cond_t qread原创 2014-06-02 00:24:44 · 7136 阅读 · 2 评论 -
C++11中的mutex, lock,condition variable实现分析
本文分析的是llvm libc++的实现:http://libcxx.llvm.org/C++11中的各种mutex, lock对象,实际上都是对posix的mutex,condition的封装。不过里面也有很多细节值得学习。std::mutex先来看下std::mutex:包增了一个pthread_mutex_t __m_,很简单,每个函数该干嘛就干嘛。class mutex原创 2014-06-22 22:57:32 · 13675 阅读 · 1 评论 -
C++11中once_flag,call_once实现分析
本文的分析基于llvm的libc++,而不是gun的libstdc++,因为libstdc++的代码里太多宏了,看起来蛋疼。在多线程编程中,有一个常见的情景是某个任务只需要执行一次。在C++11中提供了很方便的辅助类once_flag,call_once。声明首先来看一下once_flag和call_once的声明:struct once_flag{ constexpr原创 2014-06-22 01:29:00 · 15214 阅读 · 2 评论 -
C++编译器到底能帮我们把代码优化到什么程度?
本文地址:http://blog.csdn.net/hengyunabc/article/details/7170865一个简单的累加求和程序: TYPE S=0; for(int i = 0;i < SIZE; i++) { S += a[i]; }很多人都觉得这个程序写得不好,编译器不能生成很好的汇编代码。于是有了以下的几种“优化”:#inc原创 2012-01-02 01:38:49 · 5107 阅读 · 4 评论 -
C++11的thread代码分析
本文分析的是llvm libc++的实现:http://libcxx.llvm.org/class threadthread类直接包装了一个pthread_t,在linux下实际是unsigned long int。class thread{ pthread_t __t_; id get_id() const _NOEXCEPT {return __t_;}}原创 2014-06-29 20:50:57 · 13060 阅读 · 2 评论 -
并行编程之多线程共享非volatile变量,会不会可能导致线程while死循环
背景大家都知道线程之间共享变量要用volatile关键字。但是,如果不用volatile来标识,会不会导致线程死循环?比如下面的伪代码:static int flag = -1;void thread1(){ while(flag > 0){ //wait or do something }}void thread2(){ //do something f原创 2014-05-25 01:30:26 · 6227 阅读 · 3 评论 -
扯谈网络编程之自己实现ping
ping是基于ICMP(Internet Control Message Protocol)协议实现的,而ICMP协议是在IP层实现的。ping实际上是发起者发送一个Echo Request(type = 8)的,远程主机回应一个Echo Reply(type = 0)的过程。为什么用ping不能测试某一个端口刚开始接触网络的时候,可能很多人都有疑问,怎么用ping来测试远程主机的某个原创 2014-05-03 05:37:12 · 6148 阅读 · 0 评论 -
详细解析boost中bind的实现
写在前面的话在C++11之后,std::bind是C++标准库的一个组件了。一开始想弄个C++11的实现来研究下,发现里面用到了可变参数模板(代码变得非常神奇).http://llvm.org/svn/llvm-project/libcxx/trunk/include/functional还是弄个原始点的boost的实现来研究下。话说网上关于boost::bind的实现的文原创 2012-07-26 01:41:52 · 15590 阅读 · 14 评论 -
C++ 中cout<<endl的实现
话说像下面的语句,应该大家都明白这是通过重载operator cout<<123;cout但是像cout是怎样实现的?起初猜想endl是一个class或者struct,再通过一个friend函数来实现的。但是翻下stl的实现,原来endl是一个函数!templateinline basic_ostream& endl(basic_ostream& __os) {原创 2012-07-22 22:36:35 · 7952 阅读 · 0 评论 -
为什么逗号表达式返回最后一个表达式的结果?--从另一个角度看C++
auto v = func1(), func2(), func3();因为一个函数调用是要经过参数压栈,调用完了,还有退栈(栈清理)的过程。而这个退栈的工作可以由调用者或者被调用者来进行,因此也分为两种不同的调用约定:__cdecl和_stdcall,当然这个扯远了。要是再扯远点,还有利用寄存器,省去压栈的fastcall和C++特有的thiscall。正因为函数调用是一个不断地入原创 2012-06-03 13:29:33 · 2098 阅读 · 1 评论 -
C++中虚函数(virtual function)到底有多慢
本文地址:http://blog.csdn.net/hengyunabc/article/details/7461919虚函数为什么慢,cpu分支预测技术,虚函数到底要调用哪些汇编,虚函数实现的简单图示,虚函数不能内联,印象中经常看到有人批评C++的虚函数很慢,但是虚函数为什么慢,虚函数到底有多慢呢?一、理论分析虚函数慢的原因主要有三个:多了几条汇编指令(运行时得到对应原创 2012-04-16 10:37:57 · 7841 阅读 · 8 评论 -
100个开源C/C++项目中的bugs(二)未定义行为、与运算优先级相关的错误
from:http://www.oschina.net/question/1579_45444未定义行为首先,一小段理论知识未定义行为是某些编程语言的特性(尤其在C和C++中),在某些情形下产生的结果將依赖于编译器的实现或指定的优化选项。换句话说,规范并没有定义 某情况下该语言的行为,仅仅是说:“在 A 条件下,B 结果是未定义的”。在这种情况下错误在你的程序中被认转载 2012-03-23 02:59:38 · 1609 阅读 · 0 评论 -
100个开源C/C++项目中的bugs(一)数组和字符串处理的错误
from:http://www.oschina.net/question/1579_45444100个开源C/C++项目中的bugs摘要介绍发现错误样本的各类开源项目数组和字符串处理的错误未定义行为与运算符优先级相关的错误格式化输出错误代码打印错误例子不正确的使用基本函数和类无效代码的例子总为 true 或 false 的条件转载 2012-03-23 02:52:12 · 2459 阅读 · 0 评论 -
扯谈网络编程之Tcp SYN flood洪水攻击
update 2017-5-11: syncookies 会点用 tcp_options 字段空间,会强制关闭 tcp 高级流控技术而退化成原始 tcp 模式。此模式会导致 封包 丢失时 对端 要等待 MSL 时间来发现丢包事件并重试,以及关闭连接时 TIME_WAIT 状态保持 2MSL 时间。 简介TCP协议要经过三次握手才能建立连接:(from wiki)于是出...原创 2014-05-12 20:45:03 · 26346 阅读 · 6 评论