[转帖]如何重新使用XC堆栈内存?
Hello,
我有一个情况我想在线程重新使用被一个线程使用的一大块内存,后来在线程。我当时的感觉是正常的内存添加到堆栈中,当它超出范围应可下,是这样的情况? 在我的makefile中使用-report看似乎内存是不是以后就可以堆叠使用已经超出了范围,让更多的堆栈空间的使用比我想的, 举个例子:
void function1() { int array1[5000]; int array2[5000]; // populate memory and do stuff return; } void function2() { int array1[5000]; int array2[5000]; // do stuff return; } int main() { function1(); function2(); }
如果这个程序需要40K(4 * 5000 * 2)或80K?我希望拨出温控功能内将再次可用内存之外,但这似乎没有发生在我的情况。在现实中,内存将不同类型(无符号的char []和int []),所以事先defininig,并通过可能是一个问题吗?理想我想有一个新的定义/分配为第二功能,但又不希望它不需要任何更多的内存,因为从功能1内存不再需要。希望有一些简单的,我看看。
谢谢,
格雷格
回答:
嗨,
在进入功能会出现堆栈分配在函数声明的变量,这个堆栈空间将被释放
从函数返回时。
如果我们看一下函数2的拆解,我们看到以下内容:
function2:
entsp 10001
retsp 10001
有分配(40004字节)和发行10001堆栈的话。
如果我们看一下,我们看到以下这些工具的报表功能:
Constraint check for "tile[0]" (node "0", tile 0):
Cores available: 8, used: 1 . OKAY
Timers available: 10, used: 1 . OKAY
Chanends available: 32, used: 0 . OKAY
Memory available: 65536, used: 40828 . OKAY
(Stack: 40144, Code: 588, Data: 96)
Constraints checks PASSED.
这符合我们寄予的厚望,大约40KB堆栈空间所使用的程序。
发表时间:2014年8月31日14:47:43