存档

‘关于生活’ 分类的存档

代码优化(1)

2014年3月20日 没有评论

代码优化,其实是有很多很基本的准则的,这里,不提算法层面的优化,因为这个层面的优化,没有太多好说的,一个好的算法,比各种各样的优化来得都更加靠谱
不多扯,看下面的基本规则
1. 延迟计算
2. 减少函数调用次数
3. 核心代码尽量短小
4. 合并IO读写
5. 控制数据结果大小,一般情况下是缩小(在已经考虑内存对齐的情况下)
6. 减少浮点运算,在精度允许的情况下,采用整数运算(放大再运算,保证精度范围)
7. 控制锁粒度、

其实写了那么多,归纳下来,就是那么几个点
1. 尽量保证cache的命中率(核心数据结构,核心代码足够短小,核心逻辑的代码尽量靠近,不要有长距离的跳转)
3. 减少浮点运算,尽量用整数运算(cpu的浮点运算和整数运算能力差异太大了)
4. IO合并

然后,具体到代码层面,大概可以看到这些特点
1. 延迟构造对象,对象要用的时候,再构造,所以,能压缩声明周期就压缩生命周期
特别是对于c++这种代码
甚至可以考虑
{
type obj;
} // 手工加上限制的作用域
2. 减少数据结构的大小
当数据结构太大的时候,超过一个cache line长度的时候,就需要考虑了,因为,压缩一次,cpu的读取就可能要少多次。一般的做法是,对成员进行重排,防止对齐的padding,然后是,合理的压缩字段的长度,比如,一个标志位,8个标志够了,就不用给int了,一个char就够了,甚至可以考虑位域。
3. 核心代码的逻辑要紧凑,不要散落得哪里都是
很多人写代码,写到哪里是哪里,结果,一条主线逻辑,几乎贯穿了整个代码,中间到处是各种异常逻辑,然后各种跨库的调用,这些东西都是很影响性能的。因为,非主线逻辑,很多时候,不会执行,这是给编译器的优化增加难度。所以,能把核心逻辑提炼出来,最好还是提炼出来,同理,经常调用的代码,最好写在一起,同一个文件,这样编译出来,物理位置也靠近。
算了,不写了,下次接着继续

python调用C函数(一)

2012年7月5日 没有评论

python调用C,目前,看到了以下几种方式

1. 把c编译成动态链接库,然后通过cdll模块来调用c暴露的接口,其实这是二进制ABI接口
2. 通过c把函数注册给python,依旧是dll/so的模式,但是,python不需要通过cdll模块来调用函数,可以和python内置函数一样调用

首先是如何通过动态连接库的方式来调用c函数:
定义一个func函数,然后,把他编译成一个动态链接库
cl /c demo.c
link /DLL demo.o /out:demo.dll

gcc -c -fPIC demo.c -o demo.o
gcc -shared demo.o -o demo.so

// demo.c
#ifdef MSVC
#define PYAPI __declspec(dllexport)
#else
#define PYAPI
#endif

/*
* 定义一个func函数,供python调用
*/
int PYAPI func(int a, int b)
{
return a + b
}

————————————cut line—————————

import sys
sys.path.append(‘./’)
from ctypes import cdll

dll = cdll.LoadLibrary(‘demo’) # 加载函数所在的动态连接库
ret = dll.func(1, 100) # 调用动态链接库内部的func函数
print ret

需要注意的是,对于windows平台,绝大部分的API都是stdcall,对于stdcall函数,如果需要调用的话,需要使用windll,而不是cdll,否则会导致堆栈不平衡崩溃。
(注意,windows user32.dll下面的那些函数,比如sprintf_s等等,都用cdll调用)

如果把PYAPI宏这样定义:
#define PYAPI __declspec(dllexport) __stdcall

那么,就需要用windll了

import sys
sys.path.append(‘./’)
from ctypes import windll
dll = windll.LoadLibrary(‘demo’)
ret = dll.func(1, 100)
print ret

其实,windll只是继承了一下cdll,更改了下函数调用约定,仅此而已

看起来,似乎是没有啥问题了,但是如果C暴露给python的函数,参数是struct类型,python里面看起来是,是没有struct类型的,那么,如何调用C的函数呢?

这里,就需要一个新的class了
ctypes.Structure

分类: 关于生活 标签:

【转载&整理&mark】iphone使用ssh tunnel+PAC翻墙

2012年1月30日 没有评论

1、确定你的iPhone已经越狱,且安装了OpenSSH和MobileTerminal。

2、将附件里iphone.pac上传到iPhone的/var/mobile文件夹中。更新一个overall.pac(全局),但还是无法观看Youtube,所以最好还是用前者。

3、在“设置”》“Wi-Fi”中设置你用的无线网络,“HTTP代理”处选择“自动”,“URL”填“file://localhost/var/mobile/iphone.pac”。

4、打开Terminal,输入“ssh -D 7070 用户名@服务器地址”,如:ssh -D 7070 todaym@dreamhost.com,首次连接会提示(yes/no),输入“yes”,然后输入密码。

5、提示连接成功后,别退出Terminal,按“Home”键回到桌面,打开Safari享受没有国界的网络吧。

6、关闭SSH连接时输入“logout”,然后再退出Terminal。

 

在3G或者EDGE下面如何使用?

SFTP进iPhone,
在private/var/preferences/systemconfiguration 里找到preferences.plist,备份之后进行修改,可用文本编辑。

在com.apple.CommCenter (ip1)
之后,

UserDefinedName之前

插入以下代码:

PAC文件 下载

iOS发布测试

2011年12月6日 1 条评论

20111206-114409.jpg

分类: 关于生活 标签:

风老大,一路走好!

2011年10月27日 没有评论

听到Alex(乔安平)走的消息的时候,整个人呆住了,拼命的给自己说这不是真的。

Alex在技术上是前辈是我的老师,在其他方面就就像一个大哥一样热心,得知我要离开帝都去成都发展,就帮我推荐成都的公司,并一直从中帮忙,虽然由于我笔试失误,没有成功,但还是很感谢。谁能想到周六晚上还和我聊了2个小时,建议我创业的大哥突然就这样去了,不敢也不想相信这一切是真的,多么希望这一切是假的,在接通galf得知风老大真的去了的时候,眼泪忍不住的就下来了,多么好的一个人就这样去了,天妒英才啊!Alex,一路走好,我会永远记得你这个老大哥的!

分类: 关于生活 标签: