Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65038
  • 博文数量: 12
  • 博客积分: 580
  • 博客等级: 中士
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-01 21:22
文章分类
文章存档

2010年(1)

2009年(5)

2008年(6)

我的朋友

分类:

2008-06-07 00:05:17

中文章如下:
 
最近看Computer Systems: A Programmer's Perspective,大致了解了c语言函数调用返回的堆栈变化. 比如函数返回int,实际上是把返回值存在一个特定的寄存器上(eax?),而返回一个float,是把返回值放在第一个浮点寄存器上%st(0)

请问,如果是返回结构体,那结构体放在哪里?我设想可以由callee把它放在堆中,在eax放置指向它的指针,然后由caller销毁.但是这样做很笨重.

代码如下,该代码可以通过gcc的编译,即使我指定了 -std=c89:

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

  typedef struct St{
    int id;
  }St;

  St* returnPointer(void)
  {
    St* p=calloc(1,sizeof(St));
    p->id=100;
    return p;
  }
   
  St returnStruct(void)
  {
    St st;
    st.id=100;
    return st;
  }

  int main()
  {
    St st1=*(returnPointer());
    St st2=returnStruct();
    printf("%d\n", st1.id);
    printf("%d\n", st2.id);

    return 0;
  }

阅读(3633) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:嵌入式linux系统开发手册_powerpc.pdf

给主人留下些什么吧!~~