c - 嵌入式设备可能的堆栈大小

标签 c embedded

我正在对一些具有 64 MB SDRAM 的嵌入式设备进行编程。 (C 用作编程语言)。 是否可以猜测(甚至是粗略的猜测)这个设备的堆栈的可能大小? 指的是我们进行分配时使用的内存,例如,

char s[100];
int t[50];

等等

例如,它会超过 50KB 吗?等等,这就是我所说的粗糙

加上当我在某个函数 f 中有变量时

f()
{
  int p;
}

当 f() 存在时,这个变量就死了吗?

所以当我调用 f2() 时:

void f2()
{
  char t[100];
}

只有 100 个元素的 char 数组的大小会被添加到堆栈大小,对吗? 不再考虑来自先前函数的 int p 的大小。

最佳答案

可以做出各种猜测 :) 大多数(所有?)嵌入式开发环境都提供分配设备内存的机制(只读、堆栈、堆等)。这通常通过链接器指令文件或 C#pragmas 完成放置在安装源文件中。如果没有关于您的开发环境的更多信息,则无法做出准确的猜测。

在函数f()中,变量p会存在于栈中。当函数退出时,堆栈上的该位置可能会用于其他用途。

对于函数 f2(),您可以预期在执行此函数时,堆栈中的 100 个字节将分配给 tp 的大小将不被考虑。

请注意,堆栈可用于其他信息,因此您无法在不考虑其他因素的情况下可靠地估计堆栈使用情况。例如,你期望递归吗?堆栈可用于存储函数调用/返回信息 - 从而减少本地(堆栈)变量的空间量。

最后,我曾使用过小于 1KB 堆栈的设备,因此应谨慎做出假设。

关于c - 嵌入式设备可能的堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21336788/

相关文章:

c - 如何通过引用将创建的指针数组传递到结构中?

c - GoogleTest 在特定测试中强制 #undef

linux - Nitrogen6x 运行 timesys 演示不接受键盘输入

java - Kindle 中的技术和标准

c - 多字节字符串和普通字符串

c - 两条线的角

c - 在 UNIX 系统 (Ubuntu 10.10) 上用 C 语言读取二进制文件

c++ - 动态分配数组时出现奇怪的段错误

c - 软件pwm作为linux内核模块

c - 是否可以使用编译指示覆盖 C 中的枚举基类型?