释放时分配在堆栈上的内存是否被清除?
Does memory allocated on the stack get cleared out when freed?
如果我们像这样在栈上分配内存:
void foobar()
{
int arr[10];
}
foobar()
退出后,对该内存块(arr
)的引用丢失。但是它归零了吗?
But is it set to zero?
不/也许。无法保证未分配内存的“价值”。标准也没有任何方法保证观察到假设的“值”。
从信息安全的角度来看:如果您将私人信息存储在一个对象中,那么您应该假设即使在该对象的存储期限之后,该信息也可能会持续存在。如果您的程序容易受到攻击(通常是通过未定义的行为),攻击者可能能够访问该信息。
否,该值未设置为零。但是你甚至不应该为它烦恼,因为这个值是不可访问的。它可能具有函数结束前的值,但访问它将是 Undefined behavior
value 可能存在的原因是因为程序只会移动其堆栈指针。下次堆栈到达该地址时,它只会用它需要的值重写它。
如果我们像这样在栈上分配内存:
void foobar()
{
int arr[10];
}
foobar()
退出后,对该内存块(arr
)的引用丢失。但是它归零了吗?
But is it set to zero?
不/也许。无法保证未分配内存的“价值”。标准也没有任何方法保证观察到假设的“值”。
从信息安全的角度来看:如果您将私人信息存储在一个对象中,那么您应该假设即使在该对象的存储期限之后,该信息也可能会持续存在。如果您的程序容易受到攻击(通常是通过未定义的行为),攻击者可能能够访问该信息。
否,该值未设置为零。但是你甚至不应该为它烦恼,因为这个值是不可访问的。它可能具有函数结束前的值,但访问它将是 Undefined behavior
value 可能存在的原因是因为程序只会移动其堆栈指针。下次堆栈到达该地址时,它只会用它需要的值重写它。