当我取消引用指向双精度的指针时,下面的代码中发生了什么?
我的理由是,由于它是与 c 类型 1:1 对应的第一类类型,它应该能够在遵从之后直接使用值,特别是当指针跨越执行上下文而不是值时。
那么,当我从值中读取时,Lua 会创建一个临时的 double,复制到其中,然后打印它吗?还是会直接使用底层的双精度?
同样对于写作,Lua 是否能够生成直接写入双精度的程序集?
C代码:
#include <stdio.h>
static double x;
void set_double(double in)
{
x = in;
}
double * get_double()
{
return &x;
}
void print_double()
{
printf("%f\n",x);
}
lua代码
ffi.cdef [[
double * get_double();
void print_double();
void set_double(double in);
]]
local lib = ffi.load('test');
--lib.set_double(10)
--lib.print_double()
local d = lib.get_double()
d[0] = 20 -- directly writing to * double without any conversion,or redundant copies?
lib.print_double()
print(d[0]) -- directly reading from double without any conversion,or redundant copies?