1

我可以查看我的堆栈已填满多少吗?
我想如果我能看到 avma 的价值,那会有所帮助。
此外,如果我对变量进行操作并将返回值存储在同一个变量中,它是否会替换变量的初始值?
向上移动堆栈指针是否会覆盖该点以下的所有内容(以防我进一步填满堆栈),甚至是分配的变量?

4

1 回答 1

0

我可以查看我的堆栈已填满多少吗?我想如果我能看到 avma 的价值,那会有所帮助。

只需打印avmaprintf("avma = %lu", avma); 或者%lX如果您更喜欢十六进制值。

此外,如果我对变量进行操作并将返回值存储在同一个变量中,它是否会替换变量的初始值?

问题太模糊了。我假设你的意思是

GEN x;
x = fun1();
x = fun2();

然后x 指向fun2pari 堆栈上创建的新数据(GEN是指针类型),但旧数据仍然存在于堆栈中,就在fun1创建它的位置。如果上面的函数返回 'ed 内存,这与您得到的没有什么不同malloc:上面的代码会泄漏内存。这就是在 libpari 编程中需要 GC 的原因。

向上移动堆栈指针是否会覆盖该点以下的所有内容(以防我进一步填满堆栈),甚至是分配的变量?

是的。“赋值变量”没有什么特别之处,它们只是指向 pari 堆栈上某个位置的指针,指示对象写入的位置(实际上是对象根)。

一种GEN方法可以使用在 pari 堆栈(所谓的克隆)之外创建对象,gclone并且这些对象不受影响。

于 2021-11-03T23:50:37.360 回答