【发布时间】:2021-01-13 10:10:34
【问题描述】:
我在一个介绍性的嵌入式系统课程测验中有这个 c 代码示例:
#include <stdlib.h>
#include <stdint.h>
//cross-compiled for MSP432 with cortex-m0plus
int main() {
int * l2;
return 0;
}
我想知道*l2在内存中的内存段、子段、权限和生命周期。
我的理解是指针 l2 将首先分配在堆栈子段中,然后因为它未初始化,它将获得一个垃圾值,在这种情况下,它是它在堆栈中找到的任何值;我认为它在具有静态生命周期的 .text 或 .const 中,并且这些答案都不正确,所以我在这里遗漏了什么吗?
编辑:
在我没有正确解决这一点的情况下通过了测验后,解决方案表显示它在无限期的堆中。我从这个答案中得到的是:因为指针本身存储在堆栈中并且它指向的对象未初始化(它不是自动或静态的),所以它存储在堆中..我猜??
【问题讨论】:
-
对我来说你的问题还不清楚。首先你说我明白......将在堆栈中分配然后你说我假设它在具有静态生命周期的.text或.const中请解释?
-
除非你递归地调用函数
main(你可能不是),那么l2的生命周期将与具有静态生命周期的变量大致相同。它只会在main返回时被销毁,这是在所有具有静态生命周期的变量被销毁之前不久。 -
@AndreasWenzel 不需要:godbolt.org/z/xYeno7 我们的程序将永远执行,但这个对象早已结束了它的生命
-
@P__J__:好的,你是对的,有些人为的例子并非如此。 :-)
-
@4386427 我的意思是解释我错误答案背后的思考过程,以便任何人都可以纠正我的误解。
标签: c pointers embedded memory-segmentation static-memory-allocation