我正在编程一些具有 64 MB SDRAM 的嵌入式设备。(C 用作编程语言)。是否可以猜测(甚至是粗略的猜测)该设备堆栈的可能大小?指的是在我们进行分配时使用的内存,例如,
char s[100];
int t[50];
Run Code Online (Sandbox Code Playgroud)
等等。
例如,它会超过50KB吗?等等,这就是我对粗糙的意思
加上当我在某个函数 f 中有变量时
f()
{
int p;
}
Run Code Online (Sandbox Code Playgroud)
当 f() 存在时,这个变量会消失吗?
所以当我调用 f2() 时:
void f2()
{
char t[100];
}
Run Code Online (Sandbox Code Playgroud)
只有 100 个元素的字符数组的大小才会添加到堆栈大小中,对吗?int p不再考虑先前函数的大小。
可以进行各种猜测:) 大多数(全部?)嵌入式开发环境都提供了分配设备内存(只读、堆栈、堆等)的机制。这通常通过链接器指令文件或 C#pragmas 放置在设置源文件。如果没有关于您的开发环境的更多信息,就无法做出准确的猜测。
在 function 中f(),变量p将存在于堆栈中。当函数退出时,堆栈上的该位置可能会被用于其他用途。
至于 function f2(),您可以预期t在此函数执行时将分配堆栈中的 100 个字节。p不会考虑的大小。
请注意,堆栈可用于其他信息,因此您无法在不考虑其他因素的情况下可靠地估计堆栈使用情况。例如,您期望递归吗?堆栈可用于存储函数调用/返回信息 - 从而减少用于本地(堆栈)变量的空间量。
最后,我使用过堆栈小于 1KB 的设备,因此应谨慎做出假设。
| 归档时间: |
|
| 查看次数: |
1495 次 |
| 最近记录: |