赞 | 0 |
VIP | 0 |
好人卡 | 1 |
积分 | 1 |
经验 | 167035 |
最后登录 | 2013-9-15 |
在线时间 | 57 小时 |
Lv1.梦旅人 风之塞尔达
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 57 小时
- 注册时间
- 2005-10-22
- 帖子
- 2492
|
本帖最后由 link006007 于 2011-5-16 15:58 编辑
但如果是针对 Ruby 1.9 说的话就很恰当了,嘿嘿。
呃 好吧。。。
不过 Linux 是最早把 64 位架构的长模式应用于实际的,不至于不能向下兼容 32 位程序啊。可能用于兼容的库默认没有和发行版一同推出?
是的。linux是跟早就有x64了,可能和一些软件自身实现有关系,如果缺少库,是运行不起来的。不过现在linux的很多程序都有专门x64版本了,又没太在意这些了。
之前一直不明白, 对齐是怎么一回事, 现在倒是了解大概意思了.
还有就是, 之前使用这个来调用 API , 但是老是出错, 求解释:
字节对齐。很大程度上是一种优化措施,和CPU的访问各种存储器的长度有关,比如x86访问一次4字节,那么在访问{char c; int n;}这样的结构,访问n的时候为了提高效率,就在c之后填充3个字节的空白。所以各种编译器通常都会有这样的优化措施。
比如NDS按键信息的地址是0x04000130,有效长度为2字节。
那么很显然
typedef struct _s_arm9_inputs {
VU16/*VU16 volatile unsigned short int*/ m_vuButtons;
}stInputArm9_Internal;
#define INPUT_ARM9_REG ((stInputArm9_Internal volatile*)0x04000130)
理论上*INPUT_ARM9_REG可以有效访问这个内存,不过实际上,我总是得到错误的结果。
后来就是发现stInputArm9_Internal 给编译成4字节了(其实我编译器路径不对。。,不过还是能跑的。。。)!!
所以在编译类似这样的结构体时,要通知编译器特殊的字节对齐标准
另外,出错的提示或表现是什么。。。:
char buf[256] = {
0
};
GetForegroundWindow();
GetWindowRect(GetForegroundWindow(), (LPRECT)buf);
运行正常。。。
(1)p get_window_rect.call(hwnd, lprect) 看看函数成功与否
(2)lprect.delete("\0") 可能照成结果不对,你是想删除结果末尾多余的0吧,不过,可能会把正确结果中的匹配项也删除。而且。。。实际上 "\0"好像删除不了什么。。。
因为"\0"*size 这样初始化出来的是同一个元素,delete不匹配。
arr = ["\0", "\0", "\0"]
p arr
arr.delete("\0")
p arr
arr = "\0" * 3
p arr
arr.delete("\0")
p arr |
|