【问题标题】:Runtime entity and Load time entity运行时实体和加载时实体
【发布时间】:2015-10-21 09:46:21
【问题描述】:

运行时实体和加载时实体有什么区别。为什么static存储类是加载时间实体?

程序:

#include<stdio.h>
void main(){
int i=10;
static int x=i;
if(x==i)
    printf("Equal");
else if(x>i)
    printf("Greater than");
else
    printf("Less than");
}

上述程序产生编译时错误。以及为什么我们不能通过i 将值分配给静态变量x

【问题讨论】:

  • void main() --> int main(void)

标签: c storage-class-specifier


【解决方案1】:

在您的代码中,

 static int x=i;

产生错误,因为在C 中,const 变量是const 限定的,而不是编译时间常数。只能使用编译时常量来初始化全局静态变量。

相关:C11,第 §6.7.9 章

具有静态或线程存储持续时间的对象的初始化程序中的所有表达式都应为常量表达式或字符串文字。

那么,回答

运行时实体和加载时实体的区别

从内存分配的角度来看,加载时间分配由编译器处理,运行时分配由库函数处理,如malloc()calloc()free() 等。

您也可以参考to this previous answer of mine 了解更多信息。

【讨论】:

  • 所以如果我声明int a=10,分配给'a'的内存是由malloc完成的。这样对吗。这称为运行时实体。
  • @mohanraj 不,绝对不是。当您调用 malloc() 时,只有 malloc 才能工作。所有其他内存分配由编译器处理。
  • 好的。 int a=10 和静态 int a=10。上面两条语句,什么时候分配内存?
  • @mohanraj static int a=10. 编译时间。 int a = 10 取决于范围。全局、编译时间、本地、函数调用时、堆栈上。
  • @mohanraj 不客气。 :-) 顺便说一句,您可以考虑 accepting 一个对您有帮助的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 2019-03-13
相关资源
最近更新 更多