我在接受采访时被问到这个问题 - “功能使用了多少内存?”。所以我试着回答说你可以把所有数据变量所占用的所有内存,它实例化的数据结构加起来 - 例如加长4个字节,1个用于char,4个用于int,32位用于32位指针系统,并添加动态分配的任何输入。面试官对我的回答不满意。
我正在学习C ++,并会欣赏任何见解。
答案 0 :(得分:7)
问题非常明确。函数本身将仅从调用者,参数及其堆栈上的局部变量占用其activation record的空间。根据体系结构,激活记录将包含诸如保存的寄存器,调用函数时返回的地址等等。
但是一个函数可以分配它在堆上需要多少内存,所以没有精确的答案。
哦另外,如果函数是递归的,那么它可能会占用大量内存,总是因为每次调用之间需要激活记录。
答案 1 :(得分:4)
我认为guide on function footprints就是你所说的。他们可能正在寻找" 32/64位(整数),因为它是一个指针" ...
答案 2 :(得分:2)
从静态行为的角度来看, 1.它使用的数据 - 所有变量内存大小的总和 2.指令大小 - 写入函数内的每条指令都会占用一些二进制存储器。这就是你的功能大小的识别方式。这只是您编译的代码大小。 从动态行为(运行时间)的角度来看, 1.由于函数调用是函数存储器而导致的堆内存。
答案 3 :(得分:1)
我敢打赌,正确答案可能是“未定义”。空函数不会消耗任何东西。
function func(){}
链接比我们实际估计的要多。
function funcA()
{
funcB();
funcC();
//...
}
大多数编译器都会优化不在其范围内使用的本地对象,因此它的容器中也只需要零内存。
function func()
{
var IamIgnored=0;
//don't do anything with IamIgnored
}
请不要错过内存对齐,所以我认为计算对象或函数使用的内存不能简单地通过在其范围内累积所有对象的内存大小来完成。