C++ 八股(3)

1.C++内存模型

堆栈全常代

(1)堆 heap :
malloc分配的内存块,其释放编译器不去管,由我们程序自己控制(一个malloc对应一个free)。涉及的问题:“缓冲区溢出”、“内存泄露”(new分配的在自由存储区 经常由堆实现)

(2)栈 stack :
是那些编译器在需要时分配,在不需要时自动清除的存储区。存放局部变量、函数参数
存放在栈中的数据只在当前函数及下一层函数中有效,一旦函数返回了,这些数据就自动释放。

(3)全局/静态存储区 (.bss段和.data段) :
全局和静态变量被分配到同一块内存中。在C语言中,未初始化的放在.bss段(还有初始化为0的)中,初始化的放在.data段中;在C++里则不区分了。

(4)常量存储区 (.rodata段) :
存放常量,不允许修改(通过非正当手段也可以修改)。

(5)代码区 (.text段) :
存放代码(如函数),不允许修改(类似常量存储区),但可以执行(不同于常量存储区)。

2..bss段存放的是什么

未初始化的或初始化为0的全局变量和静态变量

3..bss段和.data放的是静态变量嘛

4.初始化不为零的变量放在哪个段的

.data段

5.gcc -fcomom 表示什么意思(不会)

6.C和C++的区别是什么

  • 面向对象编程:C++支持面向对象编程,有封装、继承、多态等特性。而C语言是面向过程编程,没有直接支持面向对象编程。
  • 标准库:C++标准库相对于C语言的标准库更加丰富,包含了更多的功能和数据结构,例如字符串处理、容器、算法等。
  • 异常处理:C++引入了异常处理机制,可以通过try-catch块来捕获和处理异常。而C语言没有内置的异常处理机制。
  • 名字空间:C++引入了名字空间的概念,可以将代码组织在不同的命名空间中,避免命名冲突。而C语言没有名字空间的概念。
  • 函数重载:C++支持函数重载,可以定义多个同名函数,但参数类型或个数不同。而C语言不支持函数重载。
  • 默认参数:C++允许在函数声明时为参数设置默认值,调用函数时可以省略这些参数。而C语言不支持默认参数。
  • 类型检查:C++对类型检查更加严格,有更多的类型安全检查机制,可以在编译期间发现一些潜在的错误。而C语言的类型检查相对较弱。
  • 内存管理:C++提供了new和delete运算符来进行动态内存分配和释放,而C语言使用malloc和free函数来进行内存管理。
  • 扩展性:由于C++支持面向对象编程和模板元编程,它具有更高的扩展性和灵活性,可以更好地适应复杂的软件开发需求。

7.C可以实现面向对象嘛

可以。面向对象编程(OOP)并不是一种特定的语言或者工具,它只是一种设计方法、设计思想。它表现出来的三个最基本的特性就是封装、继承与多态。

8.C中的结构体中加什么可以实现面向对象的思想

在 C 语言中,struct内部不能直接包含函数,但可以包含函数指针。函数指针允许在结构体内部存储对函数的引用,从而实现一些类似于面向对象的特性,比如多态性。通过将函数指针作为结构体的成员,可以在结构体内部模拟类似于对象的行为。

#include <stdio.h>
 
// 基类
typedef struct {
    int data;
    void (*display)(void*);
} Base;
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值