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
Finding Bugs using Path-Sensitive Static Analysis0 码力 | 35 页 | 14.13 MB | 1 年前3
Back to Basics: Pointers0 码力 | 152 页 | 5.61 MB | 1 年前3
Qcon北京2018-《以Null的处理、回调地狱的应对为例,看C#背后的问题解决思路》-Mads+Torgersen0 码力 | 32 页 | 2.66 MB | 2 年前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 式基本等价。 • 顺便一提: • int x{}; • void *p{}; · 与 • int x{0}; • void *p{nullptr}; 等价,都会零初始化。但是你不写那个空括号就会变成内存中随机的值。 • 再比如:std::cout << int(); 会打印出 0 ## Demo(Hello,world) name:佩奇 weight: 80 ! 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
PlantUML 1.2019.6 言語リファレンスガイド基本のコマンドは hide empty members です。このコマンドは属性やメソッドが空の場合に非表示にします。 empty members の代わりに使用することができます: • empty fields または empty attributes は空のフィールドに、 • empty methods は空のメソッドに、 • fields または attributes は、それらが記述されていても非表示になります、 18 名前空間 パッケージ内では、クラスの名前はこのクラスの一意な識別子です。それは、全く同じ名前の2つのクラスを異なるパッケージに持つことができないことを意味します。 そのような場合、パッケージの代わりに名前空間を使用したらいいでしょう。 名前空間からの完全修飾名によりクラスを参照することができます。デフォルトの名前空間からのクラスは、一つのドットで修飾します。 明示的に名前空間を作成す 明示的に名前空間を作成する必要はないことに注意してください:完全修飾されたクラスは自動的に適切な名前空間に置かれています。 @startuml class BaseClass namespace net.dummy #DDDDDD { .BaseClass <|-- Person Meeting o-- Person .BaseClass <|- Meeting } namespace net.foo0 码力 | 174 页 | 1.99 MB | 2 年前3
C++ Under the Hood0 码力 | 168 页 | 13.55 MB | 1 年前3
共 796 条
- 1
- 2
- 3
- 4
- 5
- 6
- 80













