加载中…
个人资料
梁斌
梁斌
  • 博客等级:
  • 博客积分:0
  • 博客访问:436,851
  • 关注人气:1,097
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

关于陈皓同志微博的一系列玩法

(2012-07-09 21:34:47)
标签:

杂谈

@左耳朵耗子 发了个微博:史上最烂的C/C++示例:返回一个针  http://www.functionx.com/cpp/examples/returnpointer.htm

很多人觉得能跑出结果很奇怪,我反汇编看了全部代码,觉得很有意思,同时想出了一个面试题目,如下,请问如下程序执行的结果:

#include <iostream>
#include "stdint.h"

using namespace std;

struct tt
{
        uint64_t a;
        uint64_t b;
};
tt & GetWeeklyHours()
{
    tt h = {11,22};
    tt &hours = h;

    return hours;
}
tt & GetWeeklyHours2()
{
    tt h = {33,44};
    tt &hours = h;

    return hours;
}

int main()
{
    tt& hours  = GetWeeklyHours();
    GetWeeklyHours2();

    cout << "Weekly Hours:  " << hours.a<<hours.b<<endl;

    return 0;
}

当然,言归正传,还是分析代码,我是怎么想到这个搞法的,
我讲代码稍微修改了下,由double类型改为了,uint64_t,为什么这么改,不详细解释,主要是方便汇编调代码,因为返回double型,用eax,而不是rax,eax用gdb不方便看,64位的,info r rax就可以看了。

下图是汇编执行的过程,并有解释,大家一看便知。因为是借助了%rax来返回这个值,因此。。我想到了那个题目,呵呵。
关于陈皓同志微博的一系列玩法






0

阅读 收藏 喜欢 打印举报/Report
前一篇:流量止损代码
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有