2018年5月5日
golang中没有继承和多态,只支持封装,那些在C/C++/Java中使用继承和多态实现的方式,在golang中就可以使用接口来进行实现,golang的接口比其他语言就灵活很多。 如下就是一个使用接口的例子: type Traversal interface { Traverse() } func main() { traversal := getTraversal() traversal.Traverse() } 1. duck typing的概念 1.1 大黄鸭是鸭子吗? 传统类……
阅读全文
2018年5月4日
1.结构体和方法 go 语言仅支持封装,不支持继承和多态 go语言没有 class,只有 struct 1.1 结构的创建 root.left = &treeNode{} root.right = &treeNode{5, nil, nil} root.right.left = new(treeNode) 不论地址还是结构本身,一律使用.来访问成员 func createNode(value int) *treeNode { return &treeNode{value: value} } root.left.right = createNode(2) //使用自定义工厂函数 注意上述代码中,createNode返回了局部变量的地址, 这种方式在C/C++……
阅读全文
2018年5月3日
1.数组 var arr1 [5]int // 声明数组 arr2 := [3]int{1, 3, 5} // 声明数组并赋值 arr3 := [...]int{2, 4, 6, 8, 10} // 不输入数组长度,让编译器来计算长度 var grid [4][5]int // 二维数组 数量写在类型前 可通过 _ 来省略变量,不仅仅是 range,任何地方都可通过 _ 来省略变量 sum := 0 for _, v := range numbers { sum += v } 如果只要下标 i,可写成for i := range numbers 为人么要用 range? 因为意……
阅读全文
2018年5月2日
1. 变量和常量 golang中变量的定义结构是:var 变量名 类型。golang中内建变量类型有: bool, string (u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptr(指针)未指定长度时根据操作系统是多少位来决定 byte, rune(长度32位,相当于 char,解决多国语言问题) float32, float64, complex64, complex128 可以看到golang中没有char, 只有rune……
阅读全文
2018年1月16日
1. VC6中的std::allocator VC6中的std::allocator源码实现如下图: 从图中可以发现,VC6中的std::allocator并没有进行memory pool这类的处理,直接在里面调用operator new(),进而调用::operator new,然后mall……
阅读全文
2018年1月14日
1. per-class allocator (ver 1.0) 前面几篇内存管理介绍了在C++中进行内存管理的接口,有了这些接口就可以开始使用这些工具管理内存。首先来看一个来自<<C++ Primer>> 3ed, p765的一个例子: #include <cstddef> #include <iostream> using namespace std; class Screen { public: Screen(int x) :i(x) {}; int geti() { return i; }; void* operator new(size_t size) { Screen *p; if (!freeStore) { size_t chunk = screenChunk * size; freeStore = p = reinterpret_cast<Screen*>(new char[chunk]); for (; p != &freeStore[screenChunk - 1]; ++p) { p->next = p +……
阅读全文
2018年1月12日
前面两篇【C++内存管理】从整体上来看了系统中四个调用层面上的内存分配和释放,然后详细的介绍了这四个层面中的操作符/函数的使用以及背后的调用关系。在这一篇我们就从内存管理实现的基本点重载开始,看看C++给我们提供了哪些可供用户使用的内存管理接口。 应用程序的设计中,我们所说的内存管……
阅读全文
2018年1月10日
上一篇中从整体上来看系统中四个层面上内存的分配和释放,这样我们就对内存分配有了一个整体的认识。这一节则详细的来写写这四个层面中的操作符或函数的使用方法,以及他们背后的调用关系。首先我们从我们使用最多的new和delete来说起。 1. new 和 delete new 操作符有时候也有地方称他为new opera……
阅读全文
2018年1月6日
内存的使用是稍底层一些的程序,或者性能要求严格的程序都是非常有讲究的一块。从程序的分层设计的角度来看,一般有四个层面上内存的分配和释放可以共给我们开发人员使用。本篇就介绍这这个层面上内存分配相关的一些函数接口。 1. 站在高处思考 从一个比较高的角度来看,内存管理说到底就是使用OS提供的……
阅读全文