友情链接
· 歪酷博客
· 管理我的Blog
· 我拍的照片
· <- Technical Guys ->
· 惊帆之静默
· <- Technical Guys ->
· <! --- Dude Start Here ---!>
· 多儿
· 洪七公的直接
· 科大吴老师
· 维C周星星
· 民工土人男
· 小猪土人女
· 闺中贝贝赵
· 女经纪范^_^
· 甜甜的老鼠
· 嗔!一群土人
· 佳佳的水云间
· micheal@uestc
· 摇滚女青年
· lyker@uestc
· JalenWoo@uestc
· plan@uestc
· 帅哥包同学
· 阿楠@uestc
· cicy小朋友
· 翠花的酸菜
· 终于承认是小资
· rice@uestc
· J@WING@uestc
· 咨询业的付毒人
· 丁珊珊同学
· 我的徒弟
· 五弟面爷
· 科大人文办周总
· <! --- Dude End Here ---!>
· <! --- Bookmark Start Here ---!>
· LWN
· Wikipedia
· ScienceWorld
· Public Library of Science
· <! --- Bookmark End Here---!>

Perpetuum Vestigium

一花一世界,一叶一乾坤。


« 上一篇: 公司年会 下一篇: ONCE »
kaby @ 2008-01-22 16:45

Shared Memory Module for Python

新开的项目因为数据量不少且需要多线程,好在基本是静态的,所以打算使用共享内存。
数据维护模块打算用python来做,其本身只有mmap支持,于是找了Nikita的这么一个尚未成熟的外部模块。
安装很顺利,但是在64位服务器上,写小块数据总是报越界。
调试了一下,发现PyArg_ParseTuple()的返回值不对:
代码里接收string length的变量被定义为unsigned long,而PyArg_ParseTuple()定义中的返回值是int;
在开发平台上,可能是32bit的机器,int和和long都是32bit,于是跑的欢畅;
于是到64位机器,unsigned的高32bit就unassigned了,于是就出问题了。

这个故事告诉我们说,写代码要严谨。

BTW:
Python我想为了跨平台吧,所以C Porting函数都定义为int/long这种形式;
于是我觉得,如果只是*inx系统,还是u_int64_t/u_int32_t来的保险。




评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定

网志分类
· 所有网志 · 壹家杂谈 · Tech. et Sci. · Paper Reader · 未分类 ·
站内搜索

订阅 RSS

0056218

歪酷博客