2010-06-23 11:18:41
涉及的技术内容包括:ASM、ANSI C、.NET/C#、Python、Linux/Ubuntu 等。
记录读书笔记、生活点滴。关注基础理论和开发……
除特别标注外,所有文章均为作者原创,转载请注明出处。谢谢!

  查看 "推荐文章目录"。  


  研发中心长期招聘开发人员,详情请点击 "Linux/C, Python 职位"、 ".NET/C# 职位"。
  雨痕内部技术交流群,欢迎熟识的朋友参与。 将 添加为您的 MSN 联系人即可。
  为杜绝垃圾广告的侵扰,只有注册用户可以发表评论和留言。
  如果有什么问题,可以单击右侧图标给雨痕发消息。( 绿色: 在线; 灰色: 脱机)
浏览模式: 普通 | 列表
1月, 2010 | 1 | 2 | >

extern alias

[ 2010-01-31 14:46:29 | 作者: yuhen ]
再次遭遇类型完全限定名(Type.Fullname = namespace + type name)撞车。简单点说,就是项目引用的 A.dll 和 B.dll 都有一个 MyNamespace.Class1 这样的类型。于是在我们使用该类型的时候就有点麻烦,我们和编译器都无法确认究竟是调用 A.MyNamespace.Class1 还是 B.MyNamespace.Class1。

可以利用 extern 修改引入的程序集的别名,在 Solution Explorer 窗口中,分别选择被引用(Reference)的 A.dll 和 B.dll 程序集,右键打开该程序集属性窗口,将 Aliases 从默认的 global 改为 A 或 B。
using System;
using System.Collections.Generic;
using System.Linq;
...

阅读全文…

String in Stack?

[ 2010-01-31 01:29:42 | 作者: yuhen ]
对于中文分词、文本聚类这些海量密集型字符串处理系统而言,.NET String 现有机制还是有一定的性能瓶颈的。就算我们用 StringBuilder 也不可避免 Heap Gen0 的频繁回收,我们是否可以像 C 语言那样在堆栈帧里直接处理字符数组呢?
unsafe static void Main(string[] args)
{
    char* p = stackalloc char[10];
    char* temp = p;

    foreach (var c in "abcdefg")
    {
        *(temp++) = c;
    }

    *temp = '\0';
    
    var s = new String(p);
}

借助 unsafe stackalloc 关键字我们可以直接在栈上分配内存块,如此利用指针就可以进行高效处理。栈的好处在于无需 ...

阅读全文…

起点,纪念!

[ 2010-01-26 04:38:46 | 作者: yuhen ]
下狠心将系统全部重做,整个迁移到 Ubuntu Desktop 9.10。虽然在 VMware 里用了小半年,但真个替换 Windows 终究有点不习惯,主要是许多用了 n 年的工具软件都没了。希望在 Ubuntu 10.4 / Visual Studio 2010 发布前,我能完全适应新的环境。

发文纪念一下。鉴于某些原因,联络没有以前那么方便了,如有事寻我,可走如下途径:

1. 手机短信,24 小时在线。
2. 电子邮件,每天会检查一次。
3. QQ, 不定时上,晚上多半会晃荡一阵。

[smile]

pthread_create memory leak ?

[ 2010-01-21 15:50:08 | 作者: yuhen ]
线程(thread) 对于 Linux 内核来说就是一种特殊的 "轻量级进程"。如同 fork() 处理子进程一样,当线程结束(exit)时,它会维持一个最小现场,其中保存有退出状态等资源,以便主线程(或其他线程)调用 thread_join() 获取这些信息。如果我们不处理这个现场,那么就会发生内存泄露。
void* test(void* arg)
{
    printf("%s\n", (char*)arg);
    return (void*)0;
}

int main(int argc, char** argv)
{
    pthread_t tid;
    pthread_create(&tid, NULL, test, "a");

    sleep(3);
    return (EXIT_SUCCESS);
}

编译后,我们用 Valgrind 检测一下。
...

阅读全文…

Python Essential: 2. Built-In Types (1)

[ 2010-01-18 19:08:15 | 作者: yuhen ]
按照用途的不同,我们可以将 Python 内置类型分为 "数据结构" 和 "程序结构" 两大类。

数据结构
  • None: null
  • Numbers: int, long, float, complex, bool
  • Sequences: str, unicode, list, tuple, xrange
  • Mapping: dict
  • Sets: set, frozenset
程序结构
  • Callable: BuiltinFunctionType, type, object, FunctionType, MethodType
  • Modules: ModuleType
  • Classes: object
  • Types: type
----------- 分隔线 -------------------
...

阅读全文…

cbase

[ 2010-01-17 17:33:20 | 作者: yuhen ]
GLib 系出名门(GTK+)、很丰富很强大,可惜某些部分有内存泄露的嫌疑;gdsl 专攻数据结构,非常专业,只是接口设计太复杂了些,用起来太麻烦;cbase 很好,功能齐全,接口简洁,非常适合像我这样习惯了 .NET FX、JDK 的懒人。cbase 和 GLib 一样是个功能丰富的函数库,搭配使用还是很爽的,几乎就是个 C Framework 了。

1. Install

下载、解压缩。

$ wget ...

阅读全文…

还有完没完?

[ 2010-01-16 01:58:12 | 作者: yuhen ]
对于 Google 之争,我本来是个纯粹的酱油众。三十大几的人了自然有自己的想法,不左不右,只关心自己的钱包。可这几天实在受不了了,一群人上下乱窜,把一个商业公司的商业行为都捧到啥啥的价值上了,TNND! 有点犯恶心了。就算某部傻×了些,那也不是今天才知道,既然做生意那就做生意吧,不愿意做就算了,本来也不指望这几个钱。非得搞出一堆精英分子满世界玩悲情,连我这个路人甲看着屏幕上几个英文字母都觉得有点别扭了。

过犹不及,等他们打出个结果再说不行么。就算原来有理也被这群精英们整出反感来了,还有完没完啊!哦,另外学舌一句:受不了就朝东边游泳吧,盖子还没来得及加上。路过的要是愿意发我五毛或者五美分,我也愿意接着,反正穷人不嫌钱少。

让程序崩溃时自动生成 Core Dump

[ 2010-01-14 20:54:24 | 作者: yuhen ]
程序总免不了要崩溃的…… 这是常态,要淡定! [sweat]

利用 setrlimit() 函数我们可以将 "core file size" 设置成一个非 0 值,这样就可以在崩溃时自动生成 core 文件了。(可参考 bshell ulimit 命令)
#include <sys/resource.h>

void test()
{
    char* s = "abc";
    *s = 'x';
}

int main(int argc, char** argv)
{
    struct rlimit res = { .rlim_cur = RLIM_INFINITY, .rlim_max = RLIM_INFINITY };
    setrlimit(RLIMIT_CORE, &res);

    test();

    return (EXIT_SUCCESS);
}
...

阅读全文…
1 | 2 | >