在 Linux Debian 上,从指针计算 C 中的堆栈内存大小?

问题描述

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 zsize_t ss1)的事实,而不是一个。第三个“差异”报告没有考虑到已创建 100 doubles 的数组,并为最后三个项目分配了值。

如何才能做到这一点?

请注意,虽然我可以在系统中包含“alloc.h”标头,但 stackavail() 函数不可用。这就是我尝试开发自己的解决方案的原因。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)