diff --git "a/02-\345\206\205\345\255\230.md" "b/02-\345\206\205\345\255\230.md" index 0294736..90a1b42 100644 --- "a/02-\345\206\205\345\255\230.md" +++ "b/02-\345\206\205\345\255\230.md" @@ -255,7 +255,7 @@ RUST也提供了一些其他的裸指针创建关联函数: `ptr::invalid(addr:usize)->*mut T` 将一个数值作为裸指针,指明这是一个无效的裸指针。 `ptr::invalid_mut(addr:usize)->*mut T` 将一个数值作为可变裸指针,指明这是一个无效的指针。 -以上两个函数通常是将指针变量用作他途以提高新能 +以上两个函数通常是将指针变量用作他途以提高性能 `ptr::from_raw_parts(data_address: *const (), metadata: ::Metadata) -> *const T` 从内存地址和元数据创建裸指针 @@ -577,7 +577,7 @@ assume_init_read是不消费self的情况下获得内部T变量,内部T变量 } ``` -#### MaybeUnint典型案列 +#### MaybeUninit典型案列 对T类型变量申请内存及赋值: ```rust use std::mem::MaybeUninit; @@ -616,7 +616,7 @@ assume_init_read是不消费self的情况下获得内部T变量,内部T变量 assert_eq!(&data[0], &[42]); ``` -下面例子说明一块内存被 `MaybeUnint`封装后,编译器将不再对其做释放,必须在代码中显式释放: +下面例子说明一块内存被 `MaybeUninit`封装后,编译器将不再对其做释放,必须在代码中显式释放: ```rust use std::mem::MaybeUninit; use std::ptr; @@ -640,7 +640,7 @@ assume_init_read是不消费self的情况下获得内部T变量,内部T变量 `MaybeUninit`是一个非常重要的类型结构,未初始化内存是编程中不可避免要遇到的情况,`MaybeUninit`也就是RUST编程中必须熟练使用的一个类型。 ## 裸指针模块再分析 -有了`MaybeUnint`做基础后,可以对裸指针其他至关重要的标准库函数做出分析 +有了`MaybeUninit`做基础后,可以对裸指针其他至关重要的标准库函数做出分析 `ptr::read(src: *const T) -> T` 此函数在`MaybeUninit`节中已经给出了代码,ptr::read是对所有类型通用的一种复制方法,需要指出,此函数完成浅拷贝,复制后,src指向的变量的所有权会转移至返回值。所以,调用此函数的代码必须保证src指向的变量生命周期结束后不会被编译器自动调用drop,否则可能导致重复drop,出现UB问题。 diff --git "a/03-\345\233\272\346\234\211\345\207\275\346\225\260\345\272\223\345\217\212\345\237\272\347\241\200\347\261\273\345\236\213.md" "b/03-\345\233\272\346\234\211\345\207\275\346\225\260\345\272\223\345\217\212\345\237\272\347\241\200\347\261\273\345\236\213.md" index 16ed671..13ba90a 100644 --- "a/03-\345\233\272\346\234\211\345\207\275\346\225\260\345\272\223\345\217\212\345\237\272\347\241\200\347\261\273\345\236\213.md" +++ "b/03-\345\233\272\346\234\211\345\207\275\346\225\260\345\272\223\345\217\212\345\237\272\347\241\200\347\261\273\345\236\213.md" @@ -9,7 +9,7 @@ intrinsic库函数是指由编译器内置实现的函数,一般如下特点 ## intrinsic 原子操作函数 原子操作函数主要用于多核CPU,多线程CPU时对数据的原子操作。intrinsic库中atomic_xxx及atomic_xxx_xxx类型的函数即为原子操作函数。原子操作函数主要用于并发编程中做临界保护,并且是其他临界保护机制的基础,如Mutex,RWlock等。 ## 数学函数及位操作函数 -各种整数及浮点的数学函数实现。这一部分放在intrinsic主要是因为现代CPU对浮点计算由很多支持,这些数学函数由汇编语言来实现更具备效率,那就有必要由编译器来内置实现。 +各种整数及浮点的数学函数实现。这一部分放在intrinsic主要是因为现代CPU对浮点计算有很多支持,这些数学函数由汇编语言来实现更具备效率,那就有必要由编译器来内置实现。 ## intrinsic 指令优化及调试函数 断言类: assert_xxxx 类型的函数 函数栈:caller_location diff --git a/05-Iterator.md b/05-Iterator.md index ff764f4..e1ef38f 100644 --- a/05-Iterator.md +++ b/05-Iterator.md @@ -236,7 +236,7 @@ pub trait Step: Clone + PartialOrd + Sized { ``` 照此,可以实现一个自定义类型的类型, 并支持Step Trait,如此,即可使用Range符号的Iterator。例如,一个二维的点的range,例如Range<(i32, i32)>的变量((0,0)..(10,10)), 三维的点的range,数列等。 -一下是为所有整数类型实现Step的宏: +以下是为所有整数类型实现Step的宏: ```rust macro_rules! step_identical_methods { diff --git "a/12-std\345\272\223(\344\270\200) FFI\345\217\212\345\206\205\345\255\230\347\256\241\347\220\206.md" "b/12-std\345\272\223(\344\270\200) FFI\345\217\212\345\206\205\345\255\230\347\256\241\347\220\206.md" index 3023d3c..2cb6874 100644 --- "a/12-std\345\272\223(\344\270\200) FFI\345\217\212\345\206\205\345\255\230\347\256\241\347\220\206.md" +++ "b/12-std\345\272\223(\344\270\200) FFI\345\217\212\345\206\205\345\255\230\347\256\241\347\220\206.md" @@ -651,7 +651,7 @@ OsString及OStr在unix上的结构定义与RUST的String及str基本一致,代 std库与core库在内存管理RUST提供的机制是统一的。即Allocator trait 与 GlobalAlloc trait。 从std库可以发现RUST为什么将内存管理分成了Allocator及GlobalAlloc两个trait。 GlobalAlloc trait是操作系统无关及操作系统相关的界面接口。GlobalAlloc的主要功能就是对操作系统的系统调用进行封装,并完成RUST的内存类型与操作系统的系统调用的类型转换。 -Allocator是RUST自身的内存管理模块,其他的RUST模块如果有内存需求,同过Allocator triat来完成。Allocator使用GlobalAlloc完成对操作系统的使用。 +Allocator是RUST自身的内存管理模块,其他的RUST模块如果有内存需求,通过Allocator triat来完成。Allocator使用GlobalAlloc完成对操作系统的使用。 std库用System 作为这两个trait的实现载体,core库中用Global重新实现了Allocator,Global没有实现GlobalAlloc,因为Global需要适配非操作系统情况,具体请参考02-内存一章, System的代码如下: