摘要:
欢迎来到我的友链小屋 展示本站所有友情站点,排列不分先后,均匀打乱算法随机渲染的喔! 友链信息 博客名称:0x9eY2j博客网址:https://www.cnblogs.com/horysk/博客头像:https://pic.cnblogs.com/avatar/1273193/2019080618 阅读全文
摘要:
构造 构造一个用户定义类型的实例只有一种方法:为其命名,并一次性初始化其所有字段: struct Foo { a: u8, b: u32, c: bool, } enum Bar { X(u32), Y(bool), } struct Unit; let foo = Foo { a: 0, b: 1 阅读全文
摘要:
幽灵数据 在处理不安全代码时,我们经常会遇到这样的情况:类型或生命周期在逻辑上与结构相关,但实际上并不是字段的一部分。这种情况最常发生在生命周期上。例如,&'a [T]的Iter(大约)定义如下: struct Iter<'a, T: 'a> { ptr: *const T, end: *const 阅读全文
摘要:
->在C语言中称为间接引用运算符,是二目运算符,优先级同成员运算符“.”。用法:p->a,其中p是指向一个结构体的指针,a是这个结构体类型的一个成员。表达式p->a引用了指针p指向的结构体的成员a。例如:struct T{int a;char b;}s;struct T* p=&s;那么,p->a相 阅读全文
摘要:
Rust 允许你指定不同于默认的数据布局策略,并为你提供了不安全代码指南。 repr(C) 这是最重要的“repr”。它的意图相当简单:做 C 所做的事。字段的顺序、大小和对齐方式与你在 C 或 C++ 中期望的完全一样。任何你期望通过 FFI 边界的类型都应该有repr(C),因为 C 是编程世界 阅读全文
摘要:
非正常大小的类型 大多数的时候,我们期望类型在编译时能够有一个静态已知的非零大小,但这并不总是 Rust 的常态。 Dynamically Sized Types (DSTs) Rust 支持动态大小的类型(DST):这些类型没有静态(编译时)已知的大小或者布局。从表面上看这有点离谱:Rust 必须 阅读全文
摘要:
repr(Rust) 首先,所有类型都有一个以字节为单位的对齐方式,一个类型的对齐方式指定了哪些地址可以用来存储该值。一个具有对齐方式n的值只能存储在n的倍数的地址上。所以对齐方式 2 意味着你必须存储在一个偶数地址,而 1 意味着你可以存储在任何地方。对齐至少是 1,而且总是 2 的幂。 基础类型 阅读全文
摘要:
在不安全的 Rust 中唯一不同的是,你可以: 对原始指针进行解引用 调用“不安全”的函数(包括 C 函数、编译器的内建指令和原始分配器。 实现“不安全”的特性 改变静态数据 访问“union”的字段 这就是所有了。这些操作被归入不安全操作的原因是,误用其中的任何一项都会引起可怕的未定义行为。调用“ 阅读全文
摘要:
安全 Rust 和不安全 Rust 之间的关系是什么?它们如何交互? Safe Rust 和 Unsafe Rust 之间的边界是由unsafe关键字控制的,从而unsafe承接了它们之间交互的桥梁。这就是为什么我们可以说 Safe Rust 是一种安全的语言:所有不安全的部分都被限制在“unsaf 阅读全文
摘要:
1.概念缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。 缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。 2.为什么要引入缓冲区比如我们从磁盘里取信息,我们先把读出的数据放 阅读全文
摘要:
Shell 脚本的执行方式通常有如下三种: (1)bash script-name 或者 sh script-name;(2)path/script-name或者./script-name;(3)sourcescript-name或者. script-name。下面,分别介绍下这三种方式的特点: ( 阅读全文
摘要:
动态库与静态库 静态(函数)库 一般扩展名为(.a或.lib),这类的函数库通常扩展名为libxxx.a或xxx.lib 。这类库在编译的时候会直接整合到目标程序中,所以利用静态函数库编译成的文件会比较大,这类函数库最大的优点就是编译成功的可执行文件可以独立运行,而不再需要向外部要求读取函数库的内容 阅读全文
摘要:
一、由源码到可执行程序的过程 1. 预处理: 源码经过预处理器的预处理变成预处理过的.i中间文件 1 gcc -E test.c -o test.i 2. 编译: 中间文件经过编译器编译形成.s的汇编文件 1 gcc -S test.i -o test.s 3. 汇编: 汇编文件经过汇编器生成目标文 阅读全文
摘要:
预处理 1)预处理的基本概念 C语言对源程序处理的四个步骤:预处理、编译、汇编、链接。 预处理是在程序源代码被编译之前,由预处理器(Preprocessor)对程序源代码进行的处理。这个过程并不对程序的源代码语法进行解析,但它会把源代码分割或处理成为特定的符号为下一步的编译做准备工作。 2)预编译命 阅读全文
摘要:
malloc malloc函数在运行时分配内存。它需要以字节为单位的大小并在内存中分配那么多空间。这意味着malloc(50)将在内存中分配50个字节。它返回一个void指针 calloc 与malloc一样,calloc也在运行时分配内存,并在stdlib.h中定义。它需要元素的数量和每个元素的大 阅读全文
摘要:
内存四区模型 32位CPU可寻址4G线性空间,每个进程都有各自独立的4G逻辑地址,其中0~3G是用户态空间,3~4G是内核空间,不同进程相同的逻辑地址会映射到不同的物理地址中。其逻辑地址其划分如下: 各个段说明如下:3G用户空间和1G内核空间 静态区域: text segment(代码段):包括只读 阅读全文
摘要:
阅读全文
摘要:
标准库提供的一些参数的数目可以有变化的函数。例如我们很熟悉的printf,它需要有一个格式串,还应根据需要为它提供任意多个“其他参数”。这种函数被称作“具有变长度参数表的函数”,或简称为“变参数函数”。我们写程序中有时也可能需要定义这种函数。要定义这类函数,就必须使用标准头文件<stdarg.h>, 阅读全文
摘要:
Global Variable Address Modifier (@address)You can assign global variables to specific addresses with the global variable address modifier. These vari 阅读全文
摘要:
阅读全文