Hello world
The Rust Slice Type
The Rust Slice Type
Slice is a kind of data structure that store heap memory, it contains two fields, one representing the memory address and the other representing the length. Our most common string literal is a kind of slice.
Slice let us reference a contiguous sequence of elements in a collection rather than the whole collection. A slice is a kind of reference, so it does not have ownership. And the slice ensures that the data it references is always valid.
String Slices
A string slice is a reference to part of a String, and it looks like this:
1 | let s = String::from("hello world"); |
Effective C++总结
ARM 移位指令
移位指令是一组经常使用的指令,它包括移位指令(含算术移位指令,逻辑移位指令),循环移位指令(含带进位循环移位指令),其作用就是将目的操作数的所有位按操作符规定的方式移动指定的位数。
ARM 中的移位指令如下:ASR, LSR, LSL, ROR和 RRX,直接写入目标寄存器中。
用 Lisp 实现一个简单的数据库
第一次认识 Lisp 是通过《黑客与画家》这本书,书中对 Lisp 赞不绝口,声称现在编程语言的发展也只是赶上了 1958 年的 Lisp 语言的水平。很多人就有疑问了,一个诞生于 1958 年的语言,计算机技术不是日新月异吗,为什么 Lisp 还没有过时?书中是这样说的,Lisp 是数学,数学是不会过时的。在书的作者 Paul Graham 的力荐下,对 Lisp 充满了浓厚的兴趣,就开始了 Lisp 的学习之旅。由于之前学习的繁忙,加上 Lisp 在”主流编程界” 好像并不受待见,我也没有一直持续学习,而是学习更加受欢迎的 C,Python 等语言,毕竟以后是要吃饭的嘛。在大学生涯的最后一段时间里,计算机基础知识学的越多,越发觉得编程语言的有趣之处,也明白了所有编程语言其实都是图灵等价的,即一个功能可以用任何编程语言实现,只不过是实现方式不一样。编程语言学的越多,越来越感受到 Lisp 本身设计的优雅,怀着一份好奇心,我又重新走进了 Lisp 的世界。
用两个栈模拟一个队列
快速幂算法
C/C++ 实现一个堆内存分配器(malloc/free)
C 语言使用 malloc 分配内存,使用 free 释放内存。那么它们是怎么实现的呢?
堆内存位于数据段(data) 和内存映射区之间,它有一个堆顶指针 brk,malloc 将堆内存分为空闲块和已分配块,使用链表来管理空闲块和已分配块。当堆内存用完时,使用系统调用 sbrk 增大 brk 来增大堆内存的大小。当要求分配的内存大小大于空闲块时,就将空闲块分成两份,一份分配给用户,剩下的内存作为一个空闲块。
C/C++ 常见的内存错误
垃圾回收的基本原理
对于像 maclloc 这样的显式分配器,应用通过调用 malloc 和 free 来分配和释放堆块,应用要负责释放所有不再需要的已分配块。
不能及时释放内存堆块可能造成严重的内存错误,例如:内存泄漏,如下列代码所示: