hengyunabc的专栏

日落黄金台金黄落日 -- 横云断岭

详细解析boost中bind的实现

写在前面的话 在C++11之后,std::bind是C++标准库的一个组件了。一开始想弄个C++11的实现来研究下,发现里面用到了可变参数模板(代码变得非常神奇). http://llvm.org/svn/llvm-project/libcxx/trunk/include/functional...

2012-07-26 01:41:52

阅读数:13313

评论数:19

C++中虚函数(virtual function)到底有多慢

本文地址:http://blog.csdn.net/hengyunabc/article/details/7461919 虚函数为什么慢,cpu分支预测技术,虚函数到底要调用哪些汇编,虚函数实现的简单图示,虚函数不能内联, 印象中经常看到有人批评C++的虚函数很慢,但是虚函数为什么慢,虚函数到...

2012-04-16 10:37:57

阅读数:5351

评论数:7

C++编译器到底能帮我们把代码优化到什么程度?

本文地址:http://blog.csdn.net/hengyunabc/article/details/7170865 一个简单的累加求和程序: TYPE S=0; for(int i = 0;i < SIZE; i++) { S += a[i]; } 很多人都...

2012-01-02 01:38:49

阅读数:3866

评论数:3

Memcached 二进制协议(BinaryProtocol) incr指令泄露内存数据的bug

缘起 最近有个分布式限速的需求。支付宝的接口双11只允许每秒调用10次。 单机的限速,自然是用google guava的RateLimiter。 http://docs.guava-libraries.googlecode.com/git-history/master/javadoc/com...

2014-11-07 20:19:14

阅读数:4801

评论数:2

C++11的thread代码分析

本文分析的是llvm libc++的实现:http://libcxx.llvm.org/ class thread thread类直接包装了一个pthread_t,在linux下实际是unsigned long int。 class thread { pthread_t __t...

2014-06-29 20:50:57

阅读数:10277

评论数:0

C++11中的mutex, lock,condition variable实现分析

本文分析的是llvm libc++的实现:http://libcxx.llvm.org/ C++11中的各种mutex, lock对象,实际上都是对posix的mutex,condition的封装。不过里面也有很多细节值得学习。 std::mutex 先来看下std::mutex: 包增了一个pt...

2014-06-22 22:57:32

阅读数:9707

评论数:1

C++11中once_flag,call_once实现分析

本文的分析基于llvm的libc++,而不是gun的libstdc++,因为libstdc++的代码里太多宏了,看起来蛋疼。 在多线程编程中,有一个常见的情景是某个任务只需要执行一次。在C++11中提供了很方便的辅助类once_flag,call_once。 声明 首先来看一下once_flag和...

2014-06-22 01:29:00

阅读数:6463

评论数:1

Java的LockSupport.park()实现分析

LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数: public native void unpark(Thread jthread); pu...

2014-06-03 02:52:12

阅读数:23422

评论数:5

并行编程之条件变量(posix condition variables)

在整理Java LockSupport.park()的东东,看到了个"Spurious wakeup",重新梳理下。 首先来个《UNIX环境高级编程》里的例子: #include struct msg { struct msg *m_next; /* ... more s...

2014-06-02 00:24:44

阅读数:4621

评论数:2

并行编程之多线程共享非volatile变量,会不会可能导致线程while死循环

背景 大家都知道线程之间共享变量要用volatile关键字。但是,如果不用volatile来标识,会不会导致线程死循环?比如下面的伪代码: static int flag = -1; void thread1(){ while(flag > 0){ //wait or d...

2014-05-25 01:30:26

阅读数:4224

评论数:1

扯谈网络编程之Tcp SYN flood洪水攻击

简介 TCP协议要经过三次握手才能建立连接: (from wiki) 于是出现了对于握手过程进行的攻击。攻击者发送大量的SYN包,服务器回应(SYN+ACK)包,但是攻击者不回应ACK包,这样的话,服务器不知道(SYN+ACK)是否发送成功,默认情况下会重试5次(tcp_syn_retries...

2014-05-12 20:45:03

阅读数:19266

评论数:6

扯谈网络编程之自己实现ping

ping是基于ICMP(Internet Control Message Protocol)协议实现的,而ICMP协议是在IP层实现的。 ping实际上是发起者发送一个Echo Request(type = 8)的,远程主机回应一个Echo Reply(type = 0)的过程。 为什么用ping...

2014-05-03 05:37:12

阅读数:4766

评论数:0

C++ 中cout<<endl的实现

话说像下面的语句,应该大家都明白这是通过重载operator cout<<123; cout 但是像 cout 是怎样实现的? 起初猜想endl是一个class或者struct,再通过一个friend函数来实现的。 但是翻下stl的实现,原来endl是一个函数! tem...

2012-07-22 22:36:35

阅读数:4145

评论数:0

为什么逗号表达式返回最后一个表达式的结果?--从另一个角度看C++

auto v = func1(), func2(), func3(); 因为一个函数调用是要经过参数压栈,调用完了,还有退栈(栈清理)的过程。 而这个退栈的工作可以由调用者或者被调用者来进行,因此也分为两种不同的调用约定: __cdecl和_stdcall,当然这个扯远了。要是再扯远点,还有...

2012-06-03 13:29:33

阅读数:1382

评论数:2

100个开源C/C++项目中的bugs(二)未定义行为、与运算优先级相关的错误

from:http://www.oschina.net/question/1579_45444 未定义行为 首先,一小段理论知识 未定义行为是某些编程语言的特性(尤其在C和C++中),在某些情形下产生的结果將依赖于编译器的实现或指定的优化选项。换句话说,规范并没有定义 某...

2012-03-23 02:59:38

阅读数:1364

评论数:0

100个开源C/C++项目中的bugs(一)数组和字符串处理的错误

from:http://www.oschina.net/question/1579_45444 100个开源C/C++项目中的bugs 摘要 介绍 发现错误样本的各类开源项目 数组和字符串处理的错误 未定义行为 与运算符优先级相关的错误 格式化输出错误 代码打...

2012-03-23 02:52:12

阅读数:2073

评论数:0

栈的实现的本质

堆和栈到底有什么区别? 这个问题往往在面试中会被问到。 栈和堆的从实现上来说,本质是一样的。 栈的大小可以在编译时,或者线创建时指定。 有空再补全。 先贴个程序: 通过进程管理器可以看到,在没有输入i之前,程序占用的内存是很小的,几百k,在输入i之后,程序占用内存不断上...

2012-02-22 01:50:36

阅读数:986

评论数:0

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