如何编写将指针返回堆栈的函数

马拉特

阅读以下问题后,我知道不存在这样的东西(至少不是“便携式”)。

但是,我正在从mono代码库中看下面的代码,这些代码返回一个指向堆栈的指针:

static void *
return_stack_ptr ()
{
    gpointer i;
    return &i;
}

令我惊讶的是,以上代码甚至可以在诸如PowerPC之类的架构上运行,我以为这只能在x86上运行(也许只有gcc)。

这将在PowerPC上工作吗?

阿纳托利格

堆栈的目的是支持函数调用和局部变量。如果您的系统有一个堆栈,它将使用它,并在其中分配局部变量。因此,假设局部变量的地址指向堆栈中的某个位置非常合理。这不是x86或gcc特有的-这是一个相当普遍的想法。

但是,使用指向不存在的变量的指针(即,超出范围后)是未定义行为。因此,不能保证此功能可以做任何有意义的事情。实际上,“聪明的”编译器可以检测到您的程序使用了未定义的行为,并用无操作替换了您的代码(并将其称为“性能优化”)。

或者,“明智”的编译器可以识别出您的函数返回了指向堆栈的指针,并通过使用硬件堆栈指针对其进行了内联。

都不保证这两个选项-此代码不可移植。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我该如何编写在模板类中声明的函数定义,以返回指向结构对象的指针?

来自分类Dev

如何从递归函数返回指针,递归函数将波兰语符号转换为反向波兰语符号?

来自分类Dev

如何在函数中返回指针数组?

来自分类Dev

从调用堆栈获取函数指针

来自分类Dev

我在Lua堆栈上有一张桌子。如何将函数压入返回此表的堆栈中?

来自分类Dev

如何编写返回验证的函数?

来自分类Dev

如何从函数返回指向结构的指针?

来自分类Dev

如何正确地将dlsym返回的指针分配给函数指针类型的变量?

来自分类Dev

如何编写返回Vec <Path>的函数?

来自分类Dev

将指针返回数组的函数

来自分类Dev

返回堆栈上的指针

来自分类Dev

如何将函数指针作为const返回?

来自分类Dev

将函数返回的指针作为其他函数的输入时,如何避免内存泄漏?

来自分类Dev

将返回对象指针的函数强制转换为返回空指针的函数合法吗?

来自分类Dev

如何编写返回标头中数组的函数?

来自分类Dev

如何将返回指针从C ++ dll函数返回到C#

来自分类Dev

编写一个函数,该函数将指向任何函数的指针作为参数

来自分类Dev

如何从C中的堆栈指针获取返回地址?

来自分类Dev

如何获得函数返回值的指针?

来自分类Dev

如何在函数中返回指针?

来自分类Dev

如何在JavaScript中编写将返回数组的函数?

来自分类Dev

如何编写给定指向地图的指针,然后返回指向地图中特定元素的指针的函数?

来自分类Dev

从调用堆栈获取函数指针

来自分类Dev

如何创建通用函数,该函数将返回c ++中任何级别的指针的值?

来自分类Dev

如何编写不使用typedefs即可返回函数指针的函数指针?

来自分类Dev

如何调用返回空指针的函数?

来自分类Dev

如何将函数指针作为const返回?

来自分类Dev

C语言如何将指针从函数返回到指针

来自分类Dev

如何从函数返回指向数组的指针?

Related 相关文章

  1. 1

    我该如何编写在模板类中声明的函数定义,以返回指向结构对象的指针?

  2. 2

    如何从递归函数返回指针,递归函数将波兰语符号转换为反向波兰语符号?

  3. 3

    如何在函数中返回指针数组?

  4. 4

    从调用堆栈获取函数指针

  5. 5

    我在Lua堆栈上有一张桌子。如何将函数压入返回此表的堆栈中?

  6. 6

    如何编写返回验证的函数?

  7. 7

    如何从函数返回指向结构的指针?

  8. 8

    如何正确地将dlsym返回的指针分配给函数指针类型的变量?

  9. 9

    如何编写返回Vec <Path>的函数?

  10. 10

    将指针返回数组的函数

  11. 11

    返回堆栈上的指针

  12. 12

    如何将函数指针作为const返回?

  13. 13

    将函数返回的指针作为其他函数的输入时,如何避免内存泄漏?

  14. 14

    将返回对象指针的函数强制转换为返回空指针的函数合法吗?

  15. 15

    如何编写返回标头中数组的函数?

  16. 16

    如何将返回指针从C ++ dll函数返回到C#

  17. 17

    编写一个函数,该函数将指向任何函数的指针作为参数

  18. 18

    如何从C中的堆栈指针获取返回地址?

  19. 19

    如何获得函数返回值的指针?

  20. 20

    如何在函数中返回指针?

  21. 21

    如何在JavaScript中编写将返回数组的函数?

  22. 22

    如何编写给定指向地图的指针,然后返回指向地图中特定元素的指针的函数?

  23. 23

    从调用堆栈获取函数指针

  24. 24

    如何创建通用函数,该函数将返回c ++中任何级别的指针的值?

  25. 25

    如何编写不使用typedefs即可返回函数指针的函数指针?

  26. 26

    如何调用返回空指针的函数?

  27. 27

    如何将函数指针作为const返回?

  28. 28

    C语言如何将指针从函数返回到指针

  29. 29

    如何从函数返回指向数组的指针?

热门标签

归档