我可以查看我的堆栈已填满多少吗?
我想如果我能看到 avma 的价值,那会有所帮助。
此外,如果我对变量进行操作并将返回值存储在同一个变量中,它是否会替换变量的初始值?
向上移动堆栈指针是否会覆盖该点以下的所有内容(以防我进一步填满堆栈),甚至是分配的变量?
1 回答
0
我可以查看我的堆栈已填满多少吗?我想如果我能看到 avma 的价值,那会有所帮助。
只需打印avma
:printf("avma = %lu", avma);
或者%lX
如果您更喜欢十六进制值。
此外,如果我对变量进行操作并将返回值存储在同一个变量中,它是否会替换变量的初始值?
问题太模糊了。我假设你的意思是
GEN x;
x = fun1();
x = fun2();
然后x
指向fun2
pari 堆栈上创建的新数据(GEN
是指针类型),但旧数据仍然存在于堆栈中,就在fun1
创建它的位置。如果上面的函数返回 'ed 内存,这与您得到的没有什么不同malloc
:上面的代码会泄漏内存。这就是在 libpari 编程中需要 GC 的原因。
向上移动堆栈指针是否会覆盖该点以下的所有内容(以防我进一步填满堆栈),甚至是分配的变量?
是的。“赋值变量”没有什么特别之处,它们只是指向 pari 堆栈上某个位置的指针,指示对象写入的位置(实际上是对象根)。
有一种GEN
方法可以使用在 pari 堆栈(所谓的克隆)之外创建对象,gclone
并且这些对象不受影响。
于 2021-11-03T23:50:37.360 回答