声明变量类型或为其赋值时是否分配了内存?

问题描述 投票:-1回答:1

如果我使用

int mem; 

然后分配了内存或在此阶段分配的]

int mem; 
mem = 10;

同样在第一阶段或第二阶段分配时,为什么还需要新的关键字

enter image description here

c++ memory allocation
1个回答
0
投票

您首先显示的代码行不是声明,它甚至不是正确的C语法。(请注意,我指的是问题的初始版本,我认为您的某些问题与不了解C语法的优点有关。这对于初学者来说是正常的,我无意冒犯您。)

这是整数变量的定义。

int mem;

此行应该只出现一次,或者最好只被编译器看到一次。

多次看到只有声明才应该的内容,例如,因为它位于包含在多个代码文件中的标头中。

extern int mem;

关于“何时”;前面的两行与将值写入变量的时间范围不同。在编译时看到的声明和定义在代码运行之前生效。实际分配,或更正确地说是链接器节的链接或布局,是在构建结束时完成所有编译的,但要在程序执行之前很长时间完成。

最后,在运行时,将值写入变量,自程序加载以来,内存一直在等待它。

您显示的第三行不能与前两行一起编译,它的错字是“ M”而不是“ m”。

此更正的行

mem = 10;

是一个赋值,只能在函数内部,并且仅在函数执行时才起作用。无法清楚地看到所显示的函数是否是这种情况,您所显示的代码并不是真正的MRE。

此行,是我们正在讨论的第四个有趣的可能性,是带有显式初始化的定义,这是推荐的最佳实践。

int mem = 10;

它具有定义的作用,以及一种将值输入变量的特殊方法。该行实际上并没有执行,仅描述/引起了链接和加载期间所应用的机制对变量的影响。它可以在函数体之外,在这种情况下,变量被认为是全局变量。这样做的结果是,无论何时第一次从函数中的已执行代码中使用变量,变量都将具有给定值。之后发生的分配确定值。

© www.soinside.com 2019 - 2024. All rights reserved.