gpt4 book ai didi

计算c中的堆栈内存

转载 作者:行者123 更新时间:2023-11-30 21:06:55 26 4
gpt4 key购买 nike

我正在尝试计算程序中使用的堆栈内存。

  1. 我应该为我定义的每个整数加 4 吗?
  2. 像 char str[128] 这样的东西,我应该添加 128 还是 129?

  3. #define ARRAY1_LIMIT 200
    #define ARRAY2_LIMIT 100

    char* array1[ARRAY1_LIMIT];
    char* array2[ARRAY2_LIMIT];

    int i = 0;
    int j = 0

    array1[i] = (char *)malloc(sizeof(char)*5);
    array2[j] = (char *)malloc(sizeof(char)*10);

我知道堆内存是5+15=15,但是不知道栈内存怎么计算?是200+100吗?

最佳答案

如果您所做的不仅仅是尝试了解堆栈使用情况以及变量分配如何影响它,那么您将需要使用堆栈深度分析工具。这样的工具可以帮助您确定您的程序在任何可能的事件序列(意外或无限递归除外)下是否可能溢出其堆栈。您可以编写自己的代码(我用 C# 编写了使用 GCC 和 IAR 编译器为 M16C 和 MIPS 目标编译的嵌入式程序),但它确实很复杂,不适合初学者尝试。

为您的特定处理器和工具链(例如 x86/x64/ARM/etc 和 GCC/VisualStudio/IAR/etc)寻找“堆栈使用分析器”或“堆栈使用分析工具”。

如果您使用的是 GCC,则可以使用 -fstack-usage 选项,但这只能为您提供每个函数的最大堆栈使用量。就其本身而言,这并不是很有帮助,因为要验证程序不会破坏其堆栈,您必须递归地遍历调用树以查看调用树的任何级别的最大堆栈深度是多少。如果您还使用 -Wstack-usage 选项,则如果任何子程序的堆栈使用量可能超过指定的堆栈深度,您会收到警告,这比仅使用 获得的信息更有用>-fstack-usage 选项。

关于计算c中的堆栈内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46413593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com