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