《在路上 …》 大四寒假

最近, 去上海参加了一次python聚会. 又见证了那比北京贵上一倍的地铁票, 和比北京贵上半倍,成都贵上一倍的伙食费.


好吧, 写点东西来纪念曾经在上海的岁月.


大四, 那时的我是很傻很天真的大学生, 正在为未来的工作忐忑不安.


无论如何 , 还是在那短短的寒假找一份家附近的实习 , 粉饰一下那惨不忍睹的简历吧 .


那时候Toplanguage的Maillist刚刚成立, 还不像现在这么水. 大家严肃的讨论着内存分配和CPU体系. 大牛们俯拾皆是可见, 小白都不敢随便发言. 


上面有大牛说要招人, 说是用很前卫的D语言. 

扫描二维码关注公众号,回复: 806218 查看本文章


作为一个喜新厌旧的菜鸟, 我总是对那些弄不懂的东西充满了装B的想象. 于是 , 我写邮件过去 , 很直白的说想找实习, 但是希望可以提供住的地方.


很高兴, 对方觉得没问题, 然后又发现居然是大学校友 , 真是意外的惊喜. 


大家就开始扯一些技术问题, 一份一份的来回 -- 离寒假还很远 , 大家扯啊扯. 什么C++和网络编程, Javascript和网页, D语言Erlang.


我问了很多低级问题 , 他总是耐心的回复很多 -- 可以做教材了.


举个例子吧

===================================

我:

    我经常听到"引入大的c++ 的库, 实在很不合算."

    但是我一直没弄明白"引入大的c++ 的库"(比如Boost)会带来那些不必要的麻烦呢(当然编译时间算一个),能解释一下吗?内存开销吗?

    十分困惑中........

  

他:

    boost 的很多部分关系不是很大, 是头文件类型的.


    1. 一个是多使用了一个动态链接库, 例如在 debian lenny 中, libstdc++.so.6 是 0.94M, 不过这个对于非存储, 内存紧张的系统, 关系到不是很大.


    2. glibc 的c 库引入了好几十个 TLS (线程局部存储), c++ 的库我没有分析过, 应该也会引入一些 TLS. 从 language shootout 的比较结果看, c++ 程序的启动速度明显比c 慢, 这些 TLS 存储以及C++给每个线程添加的额外初始化代码应该也多少有些影响. 


    3. workingset 越小, cpu 的 cache 效率越高, 特别是对于小 cache 的cpu, 影响还大一些.


    c++ 的库中, iostream 使用的形式非常笨拙, 我很不喜欢. memorystream 本来应该实现成一个性能非常高的设施才好, 但是结果简单的使用会造成内部会有动态内存分配, 这样效率会很低. 加上 iostream 的设计过于复杂, 我对这个部分没有什么好感.



    还有 C++ 库本身的特点:

    stl 库, 使用方便是由于它是非侵入式的, 好处是不必去修改相关的类的实现; 


    带来的问题是, 我们在容器中存什么? 存指针还是存对象 ?

    1. 如果在容器中直接存整个对象 (value), 那么一个对象要在几个容器中同时处理, 就非常不便了.

    2. 如果在容器中存指针, 那么类似 list, hash 之类的, 每次加入一个对象, 每个容器都还要为其分配一次内存, 这个开销可不算小.


    写高性能代码的时候, 内存分配不优化容易造成瓶颈. 所以很多软件, 例如 apache, nginx 都自带pool 管理, ACE 也提供几个 pool 实现. 


    考虑一下, 如果一个对象几乎都要加入到几个固定的容器中, 那么容器使用到的数据结构, 能在对象中直接分配, 就可以省掉几个内存分配, 时间空间都省下来了, 这就是侵入式容器. 有人给boost 提交过侵入式容器, 但是还早. C 中倒是习惯用很多侵入式容器.


    如果一个对象, 用侵入式容器记录它, 那么只需要对象本身的pool 即可, 用 stl 的话, 不同的容器需要的内存块大小还可能不一致, 要么用不同大小的pool, 要么用复杂的pool, 每个 allocator 参数化的时候都要弄一次, 其实不是很方便.

=======================================


好吧, 到今天, 我的C++都快扔得差不多了. 真是辜负了当年那些谆谆教诲, 心中一阵惭愧.


终于在过去的某一天, 我去了上海 . 还记得那时候大牛打的来到地铁站接我 , 然后带我去住的地方 -- 与他和另外一位程序员合住在一起.


房子很大, 坐落在张江. 为我新买的床刚刚送到, 第一天就这样开始了.


作为一个自以为是的小白, 干不了什么有用的活. 一边学着D语言 , 一边当学徒打杂.


每天早晨 , 大家三个人一起走路去上班 , 晚上再走回来 -- 传说这样可以锻炼身体. 


路上大家就聊些不着边际的东西 -- 多模式匹配算法 , 今天又有几个好玩的简历, 他的表弟与有道 ... ... 


记忆遗忘的太快 , 我几乎都快想不起来更多的话题了. 正如当时学了很多很多东西 -- 到现在我又忘得差不多了.


周边的地名很有趣 , 什么爱迪生路, 什么张衡路, 都是些人名. 

晚上回家以后, 好逸恶劳的我总是会晚上一两盘<英雄无敌>, 大家也常一起下楼去买些零食和水果. 


上海期间还有一些其他趣事, 比如去和当时做 ken1ken.com 的人聊了聊 -- 作为一个地道的土鳖向小时候去美国,长大回中国的有为青年介绍中国国情.以及他请我吃了我有生以来感觉菜的单价最贵的一次午饭 -- 不过真的很好吃.


天长地久有时尽,何况是短暂的寒假. 很快就到年关了 , 上海下起了N年以来的最大的雪.


临走之前 , 先是公司聚餐, 我受之有愧的拿了实习工资 :) 


离开的中午, 大牛又请吃饭. 在一片白色中 , 我告别了上海.


回家以后,我发邮件说 "最后一学期我还想去北京看看, 如果没有合适的 , 那我就来投奔你".


大牛表示了欢迎 ,然后说, "如果想去微软这些大公司的话,可以帮忙推荐一下". 


好吧 , 说真的 , 我当时很感动 -- 不过 , 我对大公司(由其是微软)抱有一种莫名的抵触, 也就不了了之.


然后开学, 去成都, 体验接下来大地震, 又是一段让人回味的末日时光.


很久以后, 我才从云风的回忆录中了解到, 他原来就是传说中的肖海彤.  


距离大神如此之近的经历 , 实在是让人难忘.

文章同步自 http://kanrss.com/~onway/t/54
同步程序见 这里
作者 张沈鹏



猜你喜欢

转载自zsp.iteye.com/blog/731379