Recent Posts
-
July 25, 2013
看网上有人问,为什么这样的程序不能正常工作
```text看网上有人问,为什么这样的程序不能正常工作_declspec (noinline) void helloworld(){ printf(“hello world”);}int main (int, char**){ const int kfunctionSize = 50; DWORD dwOldProtect; char *buf = new char [200]; if (!VirtualProtect(buf,kfunctionSiz...
-
July 17, 2013
C++ 的new 操作符抛不抛出异常的问题
下载LOFTER我的照片书 |最近碰到一个问题,vc 6.0的new是不抛出异常的,只是返回空指针。但后来c++ 标准规定new造作符分配不到哦啊内存时抛出std::bad_alloc异常了,vc后来的版本也就跟着改了。但之前的vc6.0过来的代码,很多都是以前的旧风格判断返回的是不是NULL的。明显这个地方需要改一下了,如果要在新的vc比如 vc2010里面正常工作的话。c++ 标准里面也是可以进行不抛出异常的new的,要写成 new (std::nothrow) 这样。另...
-
June 07, 2013
Linux怎么把block层的bio request发给scsi底层驱动(从submit_bio到scsi_request_fn)
Understanding Linux kernel一书大概说了bio 是怎么传给设备底层驱动的。14.3.3. Activating the Block Device Driverhttp://140.120.7.20/LinuxRef/LinuxKernel/understandlk-chp-14.html#understandlk-chp-14-sect-3.3 这里会解释block层是怎么把request发给底层的设备驱动的。不过新的3.9的内核这个已经跟书上说的变了好多,比如bl...
-
June 05, 2013
Paul e. mckenney 在acm queue的文章,又来说他的rcu了(hazard pointers 和rcu (read Copy Update)原子操作性能差 )
Structured Deferral: Synchronization via Procrastinationhttps://queue.acm.org/detail.cfm?id=2488549提到hazard pointers 和RCU (read-copy-update) 两种技术是如何克服reference counters的原子操作在多cpu同步时性能比较差的问题的。可以认真去看一下,hazard pointers之前在无锁编程数据结构时见到,不是很理解,这里讲的比较清楚。原子...
-
June 04, 2013
False sharing 问题的一些理解
下载LOFTER我的照片书 |一直对这个问题似懂非懂的样子,再找了一些文章看看。False sharing occurs when multiple concurrent tasks that are running on separate processors write to variables that are located on the same cache line. When one task writes to one of the variables, the cach...
-
May 29, 2013
提高c 和 c++程序的编译速度
C++ 程序编译之所以慢,应该和他的include头文件依赖相关。一个cpp文件,include了一个头文件,头文件又include很多头文件。编译的时候,就需要磁盘不停的打开和加载不同的头文件。但很多cpp文件,包含了很多头文件的时候,即使每个cpp包含的头文件都是一样的,而且,同一个cpp文件里面,有可能由于头文件循环include等依赖关系不是很清楚,导致一个头文件被单一一个cpp文件include 几十次之多。那么磁盘上就同时打开关闭多次这个文件,编译起来就慢了。如果你不能理解这个...
-
May 07, 2013
Inux 3.9的 socket 选项so_reuseport
最近老看别人提起选项SO_REUSEPORT, 应该是Google 工程师做的一个修改,允许里inux tcp程序,可以多个进程绑定到同一个端口上。这样多个进程在accept同一个端口上面过来的连接和数据。这样在多核cpu 上面更能充分发挥多核的优势。 这个patch的改进,就是让这种应用场合更简单性能更好吧。比如连接负载在多线程(或进程)之间分布更均匀,避免“惊群” 之类的。 Nginx本来就有实现多进程在同一个socket上面 accept,然后通过锁来避免多进程竞争(惊群...
-
April 24, 2013
程序性能测试相关的两篇文章
Thinking Methodically about Performancehttps://queue.acm.org/detail.cfm?id=2413037Thinking Clearly about Performancehttp://queue.acm.org/detail.cfm?id=1854041都是大师之做啊,方法论。打算根据第二篇的 QUEUING DELAY 和KNEE方法,测试自己程序是不是符合 M/M/m 模型的。
-
April 24, 2013
Visual studio 2008 调试时中断下来后生成dump文件的办法
程序crash之后,现在i配置默认启动 visutal studio 2008 visual studio 2010的调试器。并不直接生成dump文件或者error report。这个应该是注册表里面的调试器设置相关的一个设置,之前也写文章了。其实在visual studio里面选择 菜单 “Debug” 最后一项-> “Save Dump As”那里就可以生成dump文件,里没有 “mini dump ” “mini dump with heap” 两种类型可以选择。保存就...
-
April 17, 2013
Cc 的#line 宏(#line directive),修改编译报错时提示的源文件名字和行数
使用bison的时候,发现很多有意思,使用gcc编译 c++的源文件的时候,提示的错误还是i显示的位置在 *.y 文件里面的。觉得很有意思的一个功能。查看了一下代码,bison是在生成的代码里面插入了多 #line 来实现的。gcc的文档 “6 Line Control ”http://gcc.gnu.org/onlinedocs/cpp/Line-Control.html这里有详细的说明。#line linenum#line linenum filename#line anythin...