Я использую NIF Erlang, а результат функции C - это массив, который я хочу отправить обратно erlang в виде списка кортежей из трех точек, каждый из которых является кортежем из двух парных.Использование NIF Erlang, как использовать malloc в ERL_NIF_TERM?
создать этот массив в настоящее время я делаю это:
ans = (ERL_NIF_TERM *)malloc(6*ntri*sizeof(ERL_NIF_TERM));
for (i=0;i<ntri;i++) {
ans[i] = enif_make_tuple3(env,
enif_make_tuple2(env,enif_make_double(env,x1[i]),enif_make_double(env,y1[i])),
enif_make_tuple2(env,enif_make_double(env,x2[i]),enif_make_double(env,y2[i])),
enif_make_tuple2(env,enif_make_double(env,x3[i]),enif_make_double(env,y3[i]))
);
}
До сих пор, кажется, работает. но это правильно? Мое рассуждение состояло в том, что на каждой ячейке массива ans
У меня есть 6 двухместных номеров размером ERL_NIF_TERM
, поэтому я выделяю в соответствии с этим.
Но это правда?
Должен ли я считать кортежи?
Какой размер ERL_NIF_TERM
в любом случае? Будет ли внутри внутри ERL_NIF_TERM
быть такого же размера int внутри ERL_NIF_TERM
? кортеж 2 ints также является ERL_NIF_TERM
, он такой же размер?
Хорошо, я думаю, что это больше похоже на какой-то указатель на реальное местоположение на куче, вот и все имеет смысл теперь. – Deddy
@ Deddy: На самом деле это [tagged pointer] (https://stackoverflow.com/a/31839473/49197) –