Можно ли получить эти адреса памяти в прологе GNU?
В основном я пытаюсь смоделировать разыменование C-указателя с помощью gnu-prolog.
Вот код:
пролог
:-foreign(fun(+integer,-integer)).
% p = &b;
testfun(Var, Val) :- fun(Val, Var).
main :-
A is 1,
testfun(A, P),
write(P),
C:
#include <gprolog.h>
#include <string.h>
PlBool fun(int ptr, int* res){
*res = &ptr; // this is wrong
if(res==NULL){
return PL_FALSE;
}else{
return PL_TRUE;
}
}
Так что в основном это неправильно, потому что ptr - это просто временная переменная в стеке, и ее память будет освобождена после вызова fun.
Итак, мой вопрос, возможно ли получить адреса памяти переменной в прологе gnu (например, в данном случае это адрес A, а не адрес ptr)?
1 ответ
Gnu Prolog довольно легко расширить, написав подпрограммы на C и связав их в исполняемый файл. но если вы пытаетесь "симулировать отношение к памяти", то я сомневаюсь, что взлом реальной функции адресации памяти будет полезен.
Вместо этого, как подсказывает @lurker, вы, вероятно, захотите "симулировать" архитектуру памяти / компьютера, а затем какой-то C-подобный язык, который "исполняется" на этом. Это звучит немного амбициозно, но об симуляции ЦП в Прологе уже спрашивали, а совсем недавно вы спрашивали здесь, с Ответом Люркера.