【发布时间】:2021-02-06 11:40:28
【问题描述】:
如果我们谈论静态内存分配,据说它是在编译时分配的,但实际上编译器只是处理这个内存分配,它实际上只是在程序开始时分配的。例如,编译器可能会在编译后的二进制文件中创建一个大的data 段,当程序加载到内存中时,程序的data 段内的地址将用作分配内存的位置。
如果我谈论自动内存分配,它是在控件进入新范围时分配的。现在我的疑问是,在这种情况下,编译器是否也会出现并将一些虚拟地址传递到编译后的二进制文件中,该地址后来成为运行时实际分配内存的地址,或者该内存仅在运行时分配,没有编译器的任何作用,就像动态内存的分配方式?
如果我有一些局部变量,比如:
int a = 10;
会有编译时分配还是运行时分配?
【问题讨论】:
-
编译器可以优化掉那个变量(不分配内存),只为那个变量使用寄存器(不分配内存)或者生成指令来为其分配堆栈空间。
标签: c memory scope static auto