问题描述
受 this related SO answer 的启发,我试图在 Linux Debian 9 上获取堆栈内存使用情况(与堆内存不同),但没有取得多大成功。我创建了一些不会产生预期结果的测试代码:
size_t top_of_stack = 0;
int main(void) {
int x = 0;
top_of_stack = (size_t) &x;
printf("Top of stack in main(): %lu\n",top_of_stack);
int y = 0;
size_t ss1 = (size_t) &y;
printf("Top of stack in main() ss1: %lu\n",ss1);
printf("Diff in main() top - ss1: %lu\n",top_of_stack - ss1);
long z = 0;
size_t ss2 = (size_t) &z;
printf("Top of stack in main() ss2: %lu\n",ss2);
printf("Diff in main() ss1 - ss2: %lu\n",ss1 - ss2);
double dd1[100];
dd1[99] = 12.0;
dd1[98] = 121.0;
dd1[97] = 122.0;
size_t ss3 = (size_t) &(dd1[99]);
printf("Top of stack in main() ss3: %lu\n",ss3);
printf("Diff in main() ss2 - ss3: %lu\n",ss2 - ss3);
return 0;
}
打印输出:
Top of stack in main(): 140733255163788
Top of stack in main() ss1: 140733255163784
Diff in main() top - ss1: 4
Top of stack in main() ss2: 140733255163776
Diff in main() ss1 - ss2: 8
Top of stack in main() ss3: 140733255163768
Diff in main() ss2 - ss3: 8
在三个“差异”打印输出中,只有第一个看起来是正确的。第二个没有说明已经创建了两个 long
变量(long z
和 size_t ss1
)的事实,而不是一个。第三个“差异”报告没有考虑到已创建 100 doubles
的数组,并为最后三个项目分配了值。
如何才能做到这一点?
请注意,虽然我可以在系统中包含“alloc.h”标头,但 stackavail()
函数不可用。这就是我尝试开发自己的解决方案的原因。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)