首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重定目标lcc编译器:传递结构参数

重定目标lcc编译器:传递结构参数
EN

Stack Overflow用户
提问于 2014-05-05 09:41:07
回答 1查看 353关注 0票数 1

我正在尝试为自定义VM重定lcc。在将结构作为参数(通过值)传递时,我遇到了一个问题。VM的堆栈从低地址增长到高地址。为参数错误地生成了结构字段的偏移量。

例如,下面的代码:

代码语言:javascript
复制
foo(sample p, sample q); 

struct sample 
{ 
    int a; 
    int b; 
}; 
main() 
{ 
    sample x, y; 
    foo(x, y); 
} 

foo()所见的结构字段a和b位于地址(&p&p-4)和(&q&q-4)。它们应该是(&p&p+4)和(&q&q+4)。main()中结构xy的地址正确地引用了它们的字段(即生成的地址是&x&x+4&y&y+4)。我已经验证了为ARG+B节点生成的代码是否正确地复制了堆栈上传递的结构参数(复制的结构的基址从较低的地址开始)。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2014-05-05 11:25:37

您对编译器如何放置堆栈的观察通常会导致混淆。

堆栈可以在任一方向上增长,具体取决于系统。我的经验是,根据你在系统上的观察,大多数是从最高地址到最低地址(使用'x‘和'y')。

结构中的值'a‘和'b’是另一回事。编译器没有对它们重新排序的特权。C规范要求在结构中按照定义的顺序对它们进行排序。

因此,您的观察结果虽然令人惊讶,但却是正确的;编译器也在正常运行。

(或者,也许我误解了所提供的细节?)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23463616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档