免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234567
最近访问板块 发新帖
楼主: send_linux
打印 上一主题 下一主题

[高级应用] AIX下的应用开发挑战知多少?专家来接招!(获奖名单已公布-2012-5-23) [复制链接]

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
61 [报告]
发表于 2012-05-30 22:55 |只看该作者
本帖最后由 一介村夫 于 2012-05-30 22:57 编辑
to407 发表于 2012-05-30 22:52
回复 61# 一介村夫
你的问题真挑剔.

谢谢你的答复。
如果你看懂了我的帖子,就会发现,其实我没有问问题。而且,你的回答是错误的。

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
62 [报告]
发表于 2012-05-30 23:04 |只看该作者
本帖最后由 to407 于 2012-05-31 00:11 编辑

回复 63# 一介村夫

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
63 [报告]
发表于 2012-05-30 23:10 |只看该作者
to407 发表于 2012-05-30 23:04
回复 63# 一介村夫

32位环境下编译的程序,是可以在64位环境下跑的。
由于32位程序中的pid_t是32位,所以64位环境的pid_t也只能是32位!
但是,64位的原生编译却把它定义成64位!这才是我指出的关键所在。
这种定义不仅仅是一种浪费,而且容易造成混乱。

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
64 [报告]
发表于 2012-05-30 23:32 |只看该作者
本帖最后由 to407 于 2012-05-31 00:10 编辑

回复 65# 一介村夫

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
65 [报告]
发表于 2012-05-30 23:50 |只看该作者
to407 发表于 2012-05-30 23:32
回复 65# 一介村夫

自己去试。

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
66 [报告]
发表于 2012-05-31 00:03 |只看该作者
回复 67# 一介村夫


    我有一点是讲错了, 那就是在32位系统上编译过的binary,在64位系统上跑的时候, 应该是仍然坚持32位上的编译结果。

    这样的问题就 并不在于是否资源浪费, 而在64位系统上面 应当重新编译app。

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
67 [报告]
发表于 2012-06-01 17:51 |只看该作者
  

   昨天抽空找了套环境来试。

结果还是有不同的
1. 在application层面, 以32位/64位模式编译的任何结果,都显示pid_t宽度为4(即32位)。
2. 64位宽度只存在于kernel extension里面,

也就是说
1. 即使在目前的AIXos上面, 各种app 还是都被解释成 sizeof(pid_t)=4
    pid_t惟一可能出现为64位和程序,是在64bit的 kernel extension里面。

2. 64-bit kernel 来解析这些app的时候, 会做扩展, 用的是long32tolong64 宏来做扩展, 这跟内核实际pid位数64没多少关系。。。。会做casting。。。
    所谓扩展也是纯为了兼容新的64bit mode
http://pic.dhe.ibm.com/infocenter/aix/v7r1/index.jsp?topic=%2Fcom.ibm.aix.kernelext%2Fdoc%2Fkernextc%2Fapp32signedlong.htm
Signed long Parameter

To convert a 32-bit signed long parameter to a 64-bit value, the 32-bit value must be sign extended.
The LONG32TOLONG64 macro is provided for this operation. It converts a 32-bit signed value into a 64-bit signed value, as shown in this example:


syscall1(long incr)

    {

        /* If the caller is a 32-bit process, convert

         * 'incr' to a signed, 64-bit value.

         */

        if (!IS64U)

            incr = LONG32TOLONG64(incr);

        .

        .

        .

    }

3. 这个转换问题的发生 跟用户层无关。。。。 也就是上面的第1点。

另外至于说资源浪费。。。。我表示也不知道IBM怎么想的。。。不过浪费一点也不是IBM买单。。。是customer买单么反正。。。。


帖个实验数据

  1. #oslevel
  2. 6.1.0.0
  3. #bootinfo -K
  4. 64

  5. > cat sizeof_test.c
  6. #include <stdio.h>
  7. #include <unistd.h>
  8. int main(int argc, const char *argv[])
  9. {

  10.     printf("long   size:%d\n", sizeof(long));
  11.     printf("signed long   size:%d\n", sizeof(signed long));

  12.     printf("int    size:%d\n", sizeof(int));
  13.     printf("signed int    size:%d\n", sizeof(signed int));

  14.     printf("double size:%d\n", sizeof(double));
  15.     printf("float  size:%d\n", sizeof(float));
  16.     printf("short  size:%d\n", sizeof(short));
  17.     printf("pid_t  size:%d\n", sizeof(pid_t));
  18.     return 0;
  19. }
复制代码
  1. gcc sizeof_test.c  -maix64 -o sizeof_gcc_64
  2. gcc sizeof_test.c  -maix32 -o sizeof_gcc_32
  3. xlc sizeof_test.c -q64 -o  sizeof_xlc_64
  4. xlc sizeof_test.c -q32 -o  sizeof_xlc_32

  5. > ./sizeof_gcc_32
  6. long   size:4
  7. signed long   size:4
  8. int    size:4
  9. signed int    size:4
  10. double size:8
  11. float  size:4
  12. short  size:2
  13. pid_t  size:4

  14. > ./sizeof_gcc_64
  15. long   size:8
  16. signed long   size:8
  17. int    size:4
  18. signed int    size:4
  19. double size:8
  20. float  size:4
  21. short  size:2
  22. pid_t  size:4

复制代码
xlc和gcc编译的结果都是一致的。
这里很明显的32位和64位比如long的长度是不一致的
pid_t都是一致的。


在操作系统层面有64位进程id的存在  并不影响application的互通,因为任何app的pid_t都会取成32(只要不去随便enable这两个宏就ok)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP