佳音的博客

2011/12/07

获取正在运行 进程的函数栈

Filed under: Uncategorized — 佳音 @ 7:31 下午

1、gdb -p pid 当前进程会挂起
2、pstack -p pid or gstack -p pid
3、gcore [-o filename] pid 然后用gdb调试。

gcc march参数 cpu相关

Filed under: Uncategorized — 佳音 @ 7:11 下午
  1.  
  2. CPU     Family  Rec. system gcc Rec. ports compiler
  3. Intel Atom D525 atom    CPUTYPE=core2 (*)       gcc45 -march=atom
  4. Intel Xeon 3065 core2   CPUTYPE=core2 (*)       gcc45
  5. Intel Xeon E5310        core2   CPUTYPE=core2 (*)       gcc45 -march=core2
  6. Intel Xeon E5405        core2   no CPUTYPE      gcc45 -march=core2
  7. Intel Core i7-920       nehalem CPUTYPE=nocona  gcc45 -march=nocona
  8. Intel Xeon X3450        nehalem CPUTYPE=nocona  gcc45 -march=nocona
  9. Intel Xeon E5620        nehalem CPUTYPE=nocona  gcc45 -march=nocona
  10. AMD Opteron 6128        barcelona       CPUTYPE=opteron-ssse3   gcc45 -march=barcelona
  11.  

http://blog.vx.sk/archives/25-FreeBSD-Compiler-Benchmark-gcc-base-vs-gcc-ports-vs-clang.html

2011/07/31

关于curl multi的bug

Filed under: Uncategorized — 佳音 @ 9:22 上午

http://curl.haxx.se/mail/lib-2010-06/0030.html

http://sourceforge.net/tracker/index.php?func=detail&aid=2501457&group_id=976&atid=100976

2011/02/15

The TIME-WAIT state in TCP and Its Effect on Busy Servers

Filed under: Uncategorized — 佳音 @ 6:20 下午

The TIME-WAIT state in TCP and Its Effect on Busy Servers from  http://www.isi.edu/touch/pubs/infocomm99/infocomm99-web/

2010/10/15

自增运算php & c

Filed under: c语言学习,php,Uncategorized — 佳音 @ 4:18 下午

以前面试的时候老有人问  ++i 和 i++ 的问题, 每每心里都在暗暗想…,
1、这俩东西功能不一样。

2、 写代码的时候多放些注意力在别的地方比在这个地方纠结强。
我总认为, 可读性和扩展性好的代码  比 一堆 又烂又快的代码好。

3、不免俗的研究了一下。

对于C

  1. #include "stdio.h"
  2.  
  3. int main(int argc, char *argv[]) {
  4.     int i = 0;
  5.  
  6.     int a = 0;
  7.     int b = 0;
  8.  
  9.     a = i++;
  10.     b=  ++i;
  11.  
  12.     i++;
  13.     ++i;
  14.  
  15.     printf("%d",a);
  16.     printf("%d",b);
  17. }

汇编后

  1.         .file   "test.c"
  2.         .section        .rodata
  3. .LC0:
  4.         .string "%d"
  5.         .text
  6. .globl main
  7.         .type   main, @function
  8. main:
  9.         pushl   %ebp
  10.         movl    %esp, %ebp
  11.         andl    $-16, %esp
  12.         subl    $32, %esp
  13.         movl    $0, 28(%esp)
  14.         movl    $0, 24(%esp)
  15.         movl    $0, 20(%esp)
  16.         movl    28(%esp), %eax
  17.         movl    %eax, 24(%esp)
  18.         addl    $1, 28(%esp)
  19.         addl    $1, 28(%esp)
  20.         movl    28(%esp), %eax
  21.         movl    %eax, 20(%esp)
  22.         addl    $1, 28(%esp)
  23.         addl    $1, 28(%esp)
  24.         movl    $.LC0, %eax
  25.         movl    24(%esp), %edx
  26.         movl    %edx, 4(%esp)
  27.         movl    %eax, (%esp)
  28.         call    printf
  29.         movl    $.LC0, %eax
  30.         movl    20(%esp), %edx
  31.         movl    %edx, 4(%esp)
  32.         movl    %eax, (%esp)
  33.         call    printf
  34.         leave
  35.         ret
  36.         .size   main, .-main
  37.         .ident  "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5"
  38.         .section        .note.GNU-stack,"",@progbits

可以看出没有赋值操作的 自增运算 不管是 ++i 还是i++ 都会被会变成一条相同的汇编(addl $1, 28(%esp))
如果有赋值操作的时候 汇编的条数是一样的 只是 几条语句的顺序不一样
所以C中这两种格式区别仅在于生成的值, 所以在仅使用它们的副作用时, 二者 完全一样,

http://c-faq-chn.sourceforge.net/ccfaq/node46.htm

但是 C++同学的表现是不一样的有兴趣的同学google一下,

悲剧 刚才写的一段代码丢了
简单说下php同学吧
有兴趣的通许参阅一下php源码 大概在这个文件里zend_compile.c
stackoverflow上有一些简单的说明:

http://stackoverflow.com/questions/1756015/whats-the-difference-between-i-and-i-in-php

原文有一段
:For further clarification, post-incrementation in PHP has been documented as storing a temporary variable which attributes to this 10% overhead vs. pre-incrementation.

是说 post-incrementation i++ 比pre-incrementation ++i 花费多10% 来存储一个临时变量。

2010/10/06

http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-1/

Filed under: Uncategorized — 佳音 @ 10:24 下午

http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-1/

2010/09/22

php extension 声明类属性

Filed under: php — 标签: — 佳音 @ 5:18 下午

在弄一个php扩展, 想把 扩展写成类的 形式, 于是在声明的时候 想给类加个array 属性
于是expect 代码是这样的

  1.  
  2. PHP_MINIT_FUNCTION(concurrency)
  3. {
  4.         zend_class_entry ce;
  5.         INIT_CLASS_ENTRY(ce, PHP_CONCURRENCY_CLASSNAME, concurrency_class_methods);
  6.         concurrency_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
  7.  
  8.         zval *requests;
  9.  
  10.         MAKE_STD_ZVAL(requests);
  11.  
  12.         array_init(requests);
  13.  
  14.         zend_printf("%d", requests->type);
  15.         zend_declare_property(concurrency_class_entry, "requests", strlen("requests"), requests, ZEND_ACC_PUBLIC);
  16.  
  17.         return SUCCESS;
  18. }
  19.  

结果报错,
PHP Fatal error: Internal zval’s can’t be arrays, objects or resources in Unknown on line 0
把requests->type 用zend_printf打出来发现 结果是4 是 ZEND定义的IS_ARRAY,
继续翻代码
发现在Zend/zend_API.c 里面zend_declare_property的原型 有这样的定义

  1.  
  2.         if (ce->type & ZEND_INTERNAL_CLASS) {
  3.                 switch(Z_TYPE_P(property)) {
  4.                         case IS_ARRAY:
  5.                         case IS_CONSTANT_ARRAY:
  6.                         case IS_OBJECT:
  7.                         case IS_RESOURCE:
  8.                                 zend_error(E_CORE_ERROR, "Internal zval’s can’t be arrays, objects or resources");
  9.                                 break;
  10.                         default:
  11.                                 break;
  12.                 }
  13.         }
  14.  

不知何意看
staceflow 上也有人遇到这种问题

http://stackoverflow.com/posts/1105360/revisions

,没办法,
于是就改成在构造函数里面 增加属性的声明
just as follow

  1.  
  2. PHP_METHOD(Concurrency, __construct)
  3. {
  4.         zval *pThis;
  5.         pThis = getThis();
  6.        
  7.         zval *requests;
  8.         MAKE_STD_ZVAL(requests);
  9.         array_init(requests);
  10.  
  11.         add_property_zval_ex(pThis, "requests", sizeof("requests"), requests);
  12. }
  13.  

在这里记下!

2010/08/25

关于 ubuntu 下 eclipse 代码编辑区域 在代码 补全 后不能编辑 的笔记

Filed under: Uncategorized — 佳音 @ 12:25 下午

以前没有发现这个问题, 今天下了一个eclipse3.6 装了之后,发现编辑代码时,补全之后 编辑器貌似还在获得焦点,
但是不能type 字符,很奇怪,
google 了一下,没有找到,解决方案,
这次baidu很出息,找到是scim问题, 据说还是一个老问题,

修改
/etc/X11/xinit/xinput.d/scim
将原来的
GTK_IM_MODULE=xim
QT_IM_MODULE=xim
改成
GTK_IM_MODULE=scim
QT_IM_MODULE=scim

之前在切换 terminal 的之后, 开始的时候键盘反应慢的问题也解决了。

2010/07/25

Twitter 更新 for 2010-07-25

Filed under: Uncategorized — 标签: — 佳音 @ 4:20 下午
  • firefox + foxyproxy + ssh 比vpn 好用多了 #

Powered by Twitter Tools

Twitter 更新 for 2010-07-25

Filed under: Uncategorized — 标签: — 佳音 @ 4:20 下午
  • firefox + foxyproxy + ssh 比vpn 好用多了 #

Powered by Twitter Tools

Older Posts »

Powered by 00RZ