C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针uintptr_t:自动随系统位数决定大小 • 刚刚说过,计算机的位数决定了内存地址的大小。 - 而指针的本质就是内存地址,所以指针的大小在 32 位系统上就 32 位,64 位系统上就 64 位。 • 稍后我们再来详细讲解一下指针,有时候我们需要把指针的地址值存在整型变量里。 • 而 32 位平台上的指针是 32 位,64 位平台上的指针是 64 位。 所以是不是需要根据当前平台来判断要使用哪一种代码了? - 不需要,可以用自动随系统位数变化的 \text{sizeof}(\text{void}^{*}) = \text{sizeof}(\text{uintptr\_t})$ ## size_t :表示大小的整数类型,其实等价于 uintptr_t • 除了指针需要随系统位数变化之外,数组的长度也是需要随系统位数变化的。 • 如果 64 位系统上 size_t 还是 uint32_t,那就无法表示超过 4GB 大小的数组了。 - 今日乳 ja 笑话:java 序。 ## int 类型对应的指针类型:int* - 指针,顾名思义,就是“指向”一个内存中的变量。 - 语法规定:任何类型 T 所对应的指针类型是 T*。 - 可以通过 & 运算符获取一个变量的指针(地址)。 - 可以通过 * 运算符访问指针指向的变量(左值)。 - 因此指针指向了变量,通过指针的 * 运算符写入的值,会造成原变量 x = 1 指针的用法。 $$ \begin{array}{r}0 码力 | 128 页 | 2.95 MB | 2 年前3
Back to Basics: Pointers0 码力 | 152 页 | 5.61 MB | 1 年前3
The Zig Programming Language 0.4.0 Documentation0 码力 | 207 页 | 5.29 MB | 2 年前3
C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理} ## 将多个逻辑上相关的变量包装成一个类 ## C++ 思想:封装 比如要表达一个数组,需要:起始地址指针 v,数组大小 n 因此 C++ 的 vector 将他俩打包起来,避免程序员犯错 0.cpp #include#include int main() Pig(),他会调用每个成员的无参构造函数。 但是请注意,这些类型不会被初始化为 0: 1. int, float, double 等基础类型 2. void *, Object * 等指针类型 3. 完全由这些类型组成的类 - 这些类型被称为 POD(plain-old-data)。 • POD 的存在是出于兼容性和性能的考虑。 ## name: weight: 878706000 com/isocpp/CppCoreGuidelines ## 三五 法则:拷贝构造函数 • 在 = 时,默认是会拷贝的。比如右边这样: 但是这样对我们当前 Vector 的实现造成一个很大的问题。其 m_data 指针是按地址值浅拷贝的,而不深拷贝其指向的数组! - 这就是说,在退出 main 函数作用域的时候,v1.m_data 会被释放两次!更危险的则是 v1 被解构而 v2 仍在被使用的情况。 - 这就 0 码力 | 96 页 | 16.28 MB | 2 年前3
The Zig Programming Language 0.1.1 Documentation0 码力 | 82 页 | 2.67 MB | 2 年前3
micrograd++: A 500 line C++ Machine Learning Library0 码力 | 3 页 | 1.73 MB | 1 年前3
C++ Under the Hood0 码力 | 168 页 | 13.55 MB | 1 年前3
Back to Basics: Lambda Expressions0 码力 | 48 页 | 175.89 KB | 1 年前3
Google C++ Style Guide0 码力 | 83 页 | 238.71 KB | 2 年前3
Lock-Free Atomic Shared Pointers Without a Split Reference Count? It Can Be Done!0 码力 | 45 页 | 5.12 MB | 1 年前3
共 379 条
- 1
- 2
- 3
- 4
- 5
- 6
- 38













