- 博客(16)
- 收藏
- 关注
原创 Rust 中堆内存与栈内存的所有权管理
Rust的所有权机制通过编译期检查确保内存安全,其核心在于栈与堆内存的差异化管理。栈内存遵循确定的LIFO原则,而堆内存通过移动语义和所有权转移避免双重释放问题。自定义智能指针实现揭示了堆内存管理的本质:栈存储指针,配合Drop trait自动释放资源。借用检查器构建生命周期图,保守但安全地验证引用有效性。性能优化需权衡移动/引用策略,体现了Rust"复杂性前移"的设计哲学,在保证安全的同时实现零成本抽象。
2025-10-30 12:15:43
323
原创 Rust 中的堆内存与栈内存所有权管理
本文深入探讨了Rust语言的所有权系统在设计上的精妙之处。通过对比栈内存的Copy语义和堆内存的Move语义,揭示了Rust如何通过编译时检查实现内存安全。文章详细分析了简单数据类型的按位复制,以及复杂类型的所有权转移机制,并通过自定义智能指针的实现展示了底层内存管理原理。最后指出所有权系统虽然增加了学习难度,但将复杂性前置到编译期,实现了运行时的零成本安全保证,体现了Rust作为系统编程语言的独特设计哲学。理解这一机制是掌握Rust的关键,也是学习系统级资源管理的重要途径。
2025-10-30 12:14:18
849
原创 Rust 中的复制语义(Copy Trait)与移动语义:深度解析与实践
本文探讨了 Rust 所有权系统中复制语义和移动语义的核心概念与应用。移动语义是 Rust 默认行为,确保所有权转移和内存安全,而复制语义通过Copy trait 实现廉价复制。文章通过代码示例展示了如何针对大型和小型数据结构选择合适的语义,强调Copy应仅用于低成本复制的值类型。同时指出错误实现Copy可能导致的性能陷阱,并提供了类型设计的决策建议。最后强调两种语义是表达类型意图的工具,需要综合考量性能、安全性和易用性,这是 Rust 程序员必须掌握的核心能力。
2025-10-30 12:13:06
407
原创 Rust 中的移动语义:深度解析与实践思考
摘要:Rust的移动语义是所有权系统的核心,通过编译期的所有权追踪实现内存安全,避免运行时开销。文章深入解析了移动语义的原理与实现,包括自定义智能指针的实践案例和零拷贝数据处理的高性能应用。特别探讨了移动语义与Copy特性的边界、API设计哲学及内存布局优化等专业考量,展现了Rust如何通过移动语义实现零成本抽象,将资源管理问题转化为编译期错误。这种设计范式从根本上改变了传统的内存管理方式。
2025-10-30 12:11:44
473
原创 Rust 所有权的三大基本规则:从理论到深度实践
Rust的所有权系统通过三大核心规则实现内存安全:1)每个值有唯一所有者;2)同一时间仅一个所有者有效;3)所有者离开作用域时自动释放资源。实践表明,这种机制配合引用、生命周期和智能指针(Rc/Arc等),能在编译期消除内存错误。开发者需在API设计、性能优化和复杂数据结构中平衡所有权转移与借用,通过RAII原则实现零成本抽象。所有权系统的严谨性虽带来学习曲线,但提供了前所未有的内存安全保障,是Rust区别于其他语言的核心竞争力。
2025-10-30 12:09:49
343
原创 仓颉语言基本数据类型:类型系统的哲学与工程实践
摘要: 华为自研的仓颉编程语言构建了严谨的静态强类型系统,其基本数据类型设计融合了现代编程需求与性能优化考量。该语言提供精细化的数值类型(包括多种位宽的整型和浮点型),采用溢出检查等安全策略;字符与字符串处理基于Unicode设计,通过Rune类型实现安全的字符操作;布尔类型严格区分真值,避免隐式转换。仓颉在类型推断与显式声明间保持平衡,采用值语义配合编译器优化,体现了安全性优先、性能可控和现代化支持的设计哲学。这套类型系统在保证代码质量的同时,为开发者提供了精确的内存控制能力。
2025-10-29 17:46:54
901
原创 仓颉变量声明与赋值:从语法糖到内存语义的深度剖析
摘 要 变量声明与赋值是编程语言的基础特性,仓颉通过let和var关键字区分不可变与可变变量,体现了不可变优先的设计哲学。本文系统分析了仓颉变量系统的核心机制:类型推断与显式声明的权衡、变量作用域与遮蔽的影响、值类型与引用类型的内存语义、延迟初始化的实现方式,以及并发环境下的线程安全问题。深入理解这些基础概念对于编写安全高效的代码至关重要,文章最后提出了最小可变性、类型明确、作用域最小化等专业实践原则,为开发者提供了全面的指导。
2025-10-29 17:45:41
888
原创 仓颉语言中的代码内联策略:深度解析与实践
代码内联策略体现了仓颉语言在性能优化方面的深厚功力。通过理解内联的原理和最佳实践,我们能够编写出既清晰又高效的代码,充分发挥仓颉语言的性能潜力。随着仓颉生态的不断完善,相信其编译优化技术将会更加成熟,为开发者提供更强大的性能保障。
2025-10-29 17:41:51
258
原创 仓颉内存分配优化:从机制到实践的性能突破
仓颉的内存分配优化是一门系统工程,涉及语言特性、编译器行为、运行时机制多个层面。从对象池到Arena分配器,从结构体布局到逃逸分析,每种技术都有其适用场景。真正的专家级优化,不仅需要掌握这些技术,更需要建立性能模型,在复杂性与性能之间找到最佳平衡点。记住:最好的优化,往往来自于更好的算法和架构设计。
2025-10-29 17:40:02
1201
原创 【无标题】
仓颉编译器的优化选项是一把双刃剑,合理使用能显著提升程序性能,误用则可能引入难以调试的问题。作为技术专家,我们需要建立系统化的性能优化思维:从算法层面到编译器层面,从理论理解到实践验证,最终通过 benchmark 和 profiling 工具来验证优化效果。只有这样,才能真正发挥仓颉语言和编译器的潜力。
2025-10-29 17:33:08
1018
原创 【无标题】
打印目录下各子目录的文件数,通过控制 -maxdepth 后面的数字来决定递归到第几层子目录,例如,我要搜索每个子目录下的各个子目录中有多少个文件,-maxdepth 就设置为2.或者,如果想从当前目录的子目录层级开始逐层打印各个子目录中的文件数,可以将-maxdepth 改为-mindepth,参数取1.
2024-07-08 21:47:49
229
1
原创 运行其他人深度学习代码的一些感悟
首先要注意一下自己的CUDA版本和代码中提供的torch版本是否一致在配置环境的文件中,有一些“依赖”的版本会有一些低,比如自己的服务器上,python的版本已经是3.9了,但是环境文件中的python是3.6的,而numpy1.20只支持py3.7以上,这样就尴尬了在配置环境文件中的东西时,最好要用一下镜像,-i 镜像网址,像这样:pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple运行代码是.
2022-03-16 01:01:37
2010
原创 NeRF笔记
NeRF目标:从任意角度渲染出清晰的场景图片<br>优化隐式的连续场景,利用稀疏的视角作为全连接神经网络的输入 输入:两个向量: 1. 空间坐标x(x, y, z三个维度) 2. 视角方向d(θ, φ两个角度,初步怀疑是直角坐标转化为球坐标时用到的两个角度) 由于体素渲染的天然可区分性,用于优化视图的输入只有一系列已知相机视角的图片 输出:两个 1. 体素密度σ 2. 发散颜色 c = (r, g, b) 映射 FΘ : (x, d
2022-02-28 18:04:49
9143
原创 改用自己数据集代替MNIST数据集的自编码器代码(加了几层网络)
我找到了自己改的代码,还加了几层网络,效果确实是比只有一层网络的好import torchfrom torch.utils.data import Dataset import torchvision.datasets as dsetsimport torchvision.transforms as transformsimport torchvisionfrom torch.autograd import Variableimport torch.nn as nnimport osimp
2022-01-10 01:15:25
2623
7
原创 自编码器(AE)代码
AE.pyimport torch import torchvision.datasets as dsetsimport torchvision.transforms as transformsimport torchvisionfrom torch.autograd import Variableimport torch.nn as nnfrom time import timefrom AE import *num_epochs = 200 # 迭代完所有训练数据batch_s
2022-01-07 17:12:25
2521
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅