gpt4 book ai didi

函数参数的C地址?

转载 作者:太空狗 更新时间:2023-10-29 14:57:12 25 4
gpt4 key购买 nike

在兼容 C89/C99 的编译器上使用函数参数的地址是否保证安全/可移植?

例如,如果函数参数满足特定大小和对齐要求,则 32 位 ARM 的 AAPCS 使用寄存器 r0-r3 进行参数传递。我假设使用通过寄存器传递的参数地址会产生意外结果,但我在我使用的 ARM 编译器上运行了一个测试,如果代码尝试引用地址,它似乎将这些参数重新定位到堆栈这些参数。虽然它在我的特定应用程序中看起来是安全的,但我想知道这是否在可以直接利用寄存器传递函数参数的体系结构(使用符合 ANSI/ISO 的编译器)中得到保证。

标准是否定义了这种行为?

最佳答案

在 C 中,唯一不能获取地址的左值是位字段(不能出现在函数参数中)和 register 存储类的变量或函数参数。获取参数的地址是绝对安全的,但请记住参数是按值传递的,因此您必须确保在其生命周期结束后不要使用局部变量或参数的地址。

通常,编译器会检查哪些局部变量和参数是一元 & 运算符的操作数。然后在适当的时候将它们复制到合适的 RAM 中。调用约定对此没有影响。

关于函数参数的C地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34519318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com