• 2015-05-05

    C/C++编程的现代习惯

    Views: 16170 | 8 Comments

    相对于汇编语言是一门操作 CPU 寄存器的语言, C/C++ 是一门操作内存的语言, 这是传统的观点. 但现代的程序应用开发, 大多是把 C/C++ 当作一门应用层语言, 所以必须适当地减少对内存的关注. 这也是本文所要讲的 - C/C++ 编程的现代习惯.

    1. 不要害怕返回结构体和类的实例

    在一些古董级的编程书里, 你绝对看不到返回结构体或者类的实例, 它们告诉你"不能返回局部变量的内存". 事实上, 返回结构体(类)的实例, 并不是把局部变量的内存(指针)返回给调用者使用, 而把局部变量复制到调用者栈上的内存. 而且, 很多情况下编译器会优化, 根本就不会发生内存拷贝.

    返回结构体(类)的实例, 比返回 malloc() 分配的内存的指针在实践上具有更多的优势, 既能使代码更清晰, 也可以完全避免内存泄漏.
    Continue reading »

    Posted by ideawu at 2015-05-05 14:39:32
  • 2014-05-26

    SSDB 1.6.8.7 发布, 支持 Android 运行

    Views: 22082 | 6 Comments

    SSDB 1.6.8.7 版本发布了, 这一个版本最大的改进是:

    1. 支持在Android设置上运行
    2. 增加同步限速功能
    3. 支持 flushdb list

    SSDB 是一个替代 Redis 的 NoSQL 存储服务器, 可将数据存储在硬盘上, 所以存储容量是 Redis 的100倍, 同时占用Redis内存的1/10.

    Posted by ideawu at 2014-05-26 11:58:49
  • 2014-05-13

    汽车之家, 比亚迪等成为开源数据库SSDB的用户!

    Views: 22283 | 6 Comments

    开源的 NoSQL 数据库 SSDB 已经一岁多了! 在这一年中, SSDB 不断被应用在众多业界知名互联网企业, 创业团队的产品中. 最近, 比亚迪汽车也成为 SSDB 的用户, 其将 SSDB 作为其车联网数据的存储服务器.

    SSDB 最初的目的是要替代 Redis, 在保证丰富的数据结构和高速的性能的同时, 提供更多大容量的存储. SSDB 使用 C++ 语言开发, 使用 Google 的 LevelDB 作为存储引擎, SSDB 也是开源的.

    * 汽车之家

    汽车之家 是中国领先的汽车消费者社区. 汽车之家网站使用 SSDB 作为缓存服务器, 存储数百 GB 的缓存数据.

    * 比亚迪汽车

    比亚迪选择 SSDB 作为其车联网大数据的存储服务器, 来存储从汽车上收集的汽车相关数据(天气, 交通, 速度, 等等), 并从 SSDB 中分析和产生报表, 为车主提供更好的服务.

    更多的 SSDB 用户案例在这里: http://www.ideawu.com/ssdb/docs/zh_cn/users.html

    Posted by ideawu at 2014-05-13 10:51:16
  • 2014-05-12

    小心 int 乘法溢出!

    Views: 11598 | 2 Comments

    C/C++ 语言里, 绝大部分平台上 int 类型是 32 位的, 无论你的操作系统是否是 64 位的. 而一些常用的函数, 如 malloc(), 它接受的参数是 size_t 类型:

    void *  malloc ( size_t size );
    

    如果你写出这样的代码:

    int mb = 3000; // 3000MB ~= 3GB
    void *p = malloc(mb * 1024 * 1024); // WRONG!
    

    这是非常危险的, 因为那个乘法得到的结果也是 int 类型, 但已经溢出了, 所以

    mb * 1024 * 1024 = -1073741824;
    

    然后

    malloc(-1073741824) = malloc((size_t)-1073741824);
    

    在 64 位系统里, size_t 是 64 位正整数, 所以

    (size_t)-1073741824 = 18446744072635809792
    

    相当于你试图分配那么多内存! 远远超出你的相像. 我在 SSDB 项目里就踩到过几次这种坑! 所以, 记住

    小心乘法运算!

    Posted by ideawu at 2014-05-12 23:52:47
  • 2014-05-09

    热烈庆祝icomet成为oschina推荐项目!

    Views: 31884 | 4 Comments

    最近, icomet 项目成为了 oschina 的推荐级项目!

    同时, icomet 更新了聊天 demo(立即试用):

    • 美化界面, 更好看了.
    • 增加好友列表, 能显示全部好友和最近联系人.
    • 离线存储消息.

    这个 demo 同时支持 Web 端和手机端, 使用 SSDB 作为持久化存储服务, 存储好友列表, 最近联系人和消息历史. 对于想开发跨终端 IM 的同学, 这个项目的代码值得你常常.

    icomet 项目主页: https://github.com/ideawu/icomet
    icomet-demo: https://github.com/ideawu/icomet-demos
    SSDB: https://github.com/ideawu/ssdb

    Posted by ideawu at 2014-05-09 23:01:03 Tags: ,
  • 2014-04-20

    为什么iComet比nginx-push-stream-module更好?

    Views: 23563 | 9 Comments

    有些项目需要使用"Web服务器推(comet)技术时, 便因为 Web Server 用的是 Nginx 便选择了 nginx-push-stream-module, 但是根据我们的使用经验, nginx-push-stream-module 非常坑, 只适合同时在线几千人的小网站使用. 下面对比 iComet 服务器和 nginx-push-stream-module:

    1. 安全和验证问题

    nginx-push-stream-module 本身没有安全验证机制, 客户端和浏览器可以随意订阅任意通道(channel). 如果想加入验证, 就要使用 nginx + lua 了, 一般的模式是通过 HTTP 访问其它的接口进行验证.

    相比较而言, iComet 自带了 token 验证机制, token 通过业务服务器来分配, 业务服务器可以进行业务相关的权限验证, 如账号密码, 好友关系等等. 一旦 token 生成之后, 验证过程不需要依赖第三方, 全部在 iComet 内部, 所以速度非常快.

    Continue reading »

    Posted by ideawu at 2014-04-20 20:49:05 Tags:
|<<<123456789>>>| 2/12 Pages, 68 Results.