代码之家  ›  专栏  ›  技术社区  ›  LB40

_ builtin-apply在gcc中构造调用的大小参数?

gcc c
  •  2
  • LB40  · 技术社区  · 15 年前

    我想玩一下gcc的构造调用功能…

    来自DOC:

    内置功能:

    void * __builtin_apply (void (*function)(), void *arguments, size_t size)

    此内置函数调用带有参数副本的函数 由参数和大小描述。

    参数的值应为 __builtin_apply_args . 参数大小指定堆栈参数数据的大小(以字节为单位)。

    此函数返回一个指向数据的指针,说明如何返回函数返回的值。数据保存在堆栈上分配的内存块中。

    计算正确的大小值并不总是简单的。该值由使用 __builtin_apply 计算应该在堆栈上推送并从传入参数区域复制的数据量。

    我的问题是,如何知道给这个尺寸参数赋予什么尺寸?如果值太小或太大,会产生什么后果?

    谢谢。。。

    1 回复  |  直到 15 年前
        1
  •  1
  •   MSN    15 年前

    基于 code snippets I found via google ,我想说的是,如果没有更多特定于平台的信息(或者至少知道调用约定),则不能直接计算大小值。如果大小太小,则不会在堆栈上传递足够的参数,函数将执行未指定的操作。如果大小太大,那么您只需占用不必要的堆栈空间。