首页 > 就业 > 笔试

笔试面试题目描述内存分配方式以及它们的区别

笔试面试题目描述内存分配方式以及它们的区别



笔试面试题目描述内存分配方式以及它们的区别

  描述内存分配方式以及它们的区别

  1) 从静态存储区域分配。

  内存在程序编译的`时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。

  2) 在栈上创建。

  在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。

  3) 从堆上分配,亦称动态内存分配。

  程序在运行的时候用malloc 或new 申请任意多少的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也最多。

  拓展:用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?

  当C 在表达式中要求布尔值时, 如果表达式等于0 则认为该值为假, 否则为真。换言之, 只要写出

  if(expr)

  无论“expr” 是任何表达式, 编译器本质上都会把它当if((expr) != 0)处理。

  如果用指针p 代替“expr” 则if(p) 等价于if(p != 0)。

  而这是一个比较上下文, 因此编译器可以看出0 实际上是一个空指针常数, 并使用正确的空指针值。这里没有任何欺骗; 编译器就是这样工作的, 并为、二者生成完全一样的代码。空指针的内部表达无关紧要。

  布尔否操作符! 可如下描述:

  !expr 本质上等价于(expr)?0:1

  或等价于((expr) == 0)

  从而得出结论

  if(!p) 等价于if(p == 0)

  类似if(p) 这样的“缩写”, 尽管完全合法, 但被一些人认为是不好的风格

    版权声明:此文自动收集于网络,若有来源错误或者侵犯您的合法权益,您可通过邮箱与我们取得联系,我们将及时进行处理。

    本文地址:https://www.gunzhua.com/jiuye/bishi/46586.html

相关内容

热门阅读
随机推荐