在C ++中编译时间和运行时

时间:2012-04-22 09:04:51

标签: c++

如果你在函数中创建了一个基本类型的变量,比如int,char,float,你是在运行时还是在编译时创建了那个变量?

如果在函数内创建了一个对象,是在运行时还是在编译时创建了该对象?

如果通过堆内存分配创建对象,是在运行时还是在编译时创建了该对象?

什么是静态内存分配和动态内存分配?

3 个答案:

答案 0 :(得分:4)

  

如果你创建了一个基本类型的变量,比如int,char,float   在一个函数内部。您是在运行时还是在运行时创建该变量?   编译时间?

您在运行时创建变量,该变量在执行函数时创建,并在函数完成时被销毁。

  

如果您在函数内创建了一个对象。您是在运行时还是在编译时创建该对象?

与上述相同。

  

如果通过堆内存分配创建对象。您是在运行时还是在编译时创建该对象?

如果你在堆上创建一个对象,你实际上是在运行时分配内存并返回一个指向它的指针。使用此指针,您可以读/写此内存。

静态内存,是仅在运行时读取的内存。

动态内存分配,是指在堆上分配对象并通过指向内存的指针进行更改。

答案 1 :(得分:0)

不,const int a=42; // a是在编译时创建的,而不是在运行时创建的。

答案 2 :(得分:0)

在c ++ 11上

constexpr告诉编译器这是一个 compile 时间常数,未分配,在需要时由值使用,并经过优化,涉及constexpr和/或{ {1}}值是在编译时计算的。 编译器可以执行其他操作,但是我认为甚至不需要分配任何大型const对象。

如果没有指针,可以在需要时使用值来优化在编译时分配的

constexpr

函数内部的

全局变量和静态变量在编译时分配

函数内部的

变量通常与传递参数一样放入 stack 内存中,但是它们可以驻留在内存中(我猜编译器是免费的)

使用const运算符分配的内容(或旧的C风格new)将保留在上,直到被释放