C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针
2.95 MB
128 页
0 评论
语言 | 格式 | 评分 |
---|---|---|
中文(简体) | .pptx | 3 |
摘要 | ||
文档深入探讨了C语言指针的特性及其在C++中的优化和封装。主要内容包括指针与数组的关系,C++引用的特性,空指针的处理,以及内存管理中的RAII思想和vector容器的使用。还涉及了内存存储方式中的大端和小端字节序问题,以及如何通过函数参数和std::optional来处理复杂参数的情况。 | ||
AI总结 | ||
《C++高性能并行编程与优化 - 从计算机组成原理看C语言指针》总结如下:
### 1. **指针与内存管理**
- **指针的本质**:指针是内存地址,指向变量的存储位置。例如,`int* p`指向整型变量的内存地址。
- **数组与指针**:函数参数中`func(int arr[])`或`func(int arr[6])`实际上等价于`func(int* arr)`,即数组名会退化为首地址指针。
- **内存分配**:
- **栈内存**:函数内部的局部变量,函数退出后自动释放。
- **堆内存**:通过`new`分配的内存需手动`free`,函数退出后不会自动释放。
- **建议**:为了避免内存泄漏,可以使用C++的RAII思想,推荐使用`std::vector`等容器自动管理内存。
### 2. **函数参数与指针**
- **std::abs函数**:C++中`std::abs`自动判断参数类型,有多种重载版本,建议使用`std::`命名空间版本。
- **表达式类型的指针**:如`func(int*)`明确指针类型,避免混淆。
- **空指针**:
- C语言指针可以为空(NULL),用于表示“不需要返回”或“不指定参数”。
- 现代C++建议使用`nullptr`代替`NULL`或`0`,更安全。
- **C++引用**:无需手动使用`&`和`*`,引用本质是指针,但不能更改指向,也不能为空。
### 3. **数组与字节序**
- **数组在内存中的存储**:数组是紧邻存储的多个元素,通过首地址指针访问。
- **字节序**:
- **大端字节序(big-endian)**:高位字节存放在低地址。
- **小端字节序(little-endian)**:低位字节存放在低地址。
- **指针类型**:如`float*`指针指向浮点数的首地址,`sizeof(float*)`在64位系统中为8字节。
### 4. **优化建议**
- **避免隐式转换**:如`fabsf`优先于`fabs`,`3.14f`优先于`3.14`。
- **明确指针类型**:避免用`func(int arr[])`写法,直接用`func(int* arr)`。
- **使用C++容器**:如`std::array`或`std::vector`替代裸指针,减少内存管理错误。
### 总结
指针是C语言的核心特性,但需要注意内存管理和类型安全。尽管C++提供了更安全的容器和引用,但理解指针的底层原理对高性能优化仍然关键。 |
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余
121 页请下载阅读 -
文档评分