Skip to content
Merged
Changes from 2 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
1cdc78e
add 算法和数据结构
Sep 5, 2018
8156c42
add
Sep 5, 2018
d38ec3f
Merge pull request #400 from zhaozhengcoder/master
CyC2018 Sep 5, 2018
5fe72c3
Update README.md
CyC2018 Sep 5, 2018
9aebc46
单例模式添加枚举实现
peiel Sep 5, 2018
a015b11
auto commit
CyC2018 Sep 5, 2018
4fa8a6b
Update and rename notes/计算机操作系统.md to notes/计算机操作系统.md
yugandharbandi Sep 5, 2018
4ee1497
Update 计算机操作系统.md
yugandharbandi Sep 5, 2018
59fda4c
Update 计算机操作系统.md
haonanya1 Sep 6, 2018
6e61d32
the difference of new and malloc
Sep 6, 2018
dba7855
Merge pull request #405 from 1980744819/master
CyC2018 Sep 6, 2018
990efe2
Merge pull request #404 from duang123/patch-1
CyC2018 Sep 6, 2018
4ad7755
Merge pull request #401 from peierlong/master
CyC2018 Sep 6, 2018
ed2a71f
Merge pull request #403 from yugandharbandi/master
CyC2018 Sep 6, 2018
1365bc4
auto commit
CyC2018 Sep 6, 2018
cb1f030
Merge branch 'master' of https://github.com/CyC2018/Interview-Notebook
CyC2018 Sep 6, 2018
3c08c15
auto commit
CyC2018 Sep 6, 2018
bd7d42b
修复代码运行报错
peiel Sep 6, 2018
f439ed1
Merge branch 'master' into master
CyC2018 Sep 6, 2018
8674be4
Merge pull request #407 from peierlong/master
CyC2018 Sep 6, 2018
941f8e3
auto commit
CyC2018 Sep 6, 2018
f82b21b
remove submodule
CyC2018 Sep 6, 2018
7324207
auto commit
CyC2018 Sep 7, 2018
187f0bd
auto commit
CyC2018 Sep 7, 2018
24c4864
Update 设计模式.md
peiel Sep 7, 2018
e69d324
Merge pull request #408 from peierlong/patch-5
CyC2018 Sep 7, 2018
0fbafac
auto commit
CyC2018 Sep 7, 2018
0b5be89
fix: fix several typos in 'Java 容器.md'
fractalists Sep 7, 2018
f6e6808
auto commit
CyC2018 Sep 7, 2018
cedbf9f
Merge branch 'master' of https://github.com/CyC2018/InterviewNotes
CyC2018 Sep 7, 2018
22e77f0
Merge pull request #409 from JacobChengZhang/master
CyC2018 Sep 7, 2018
90440d8
auto commit
CyC2018 Sep 8, 2018
8a9b8b1
Merge branch 'master' of https://github.com/CyC2018/Interview-Notebook
CyC2018 Sep 8, 2018
5c5c056
Update Java 基础.md
blueblueblueblueblueblue Sep 10, 2018
59ca4ee
Merge pull request #412 from blueblueblueblueblueblue/patch-1
CyC2018 Sep 10, 2018
e697abd
auto commit
CyC2018 Sep 10, 2018
3c6be1a
auto commit
CyC2018 Sep 10, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions notes/CyC 学习交流群 问题汇总.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,21 @@ https://www.cnblogs.com/sunziying/p/6510030.html
By @CyC

---
# 1. new 和 malloc 的区别

* 属性
> new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持
* 参数
> 使用new操作符申请内存分配时无需指定内存块的大小,编译器会根据类型信息自行计算。malloc则需要显式指出内存的尺寸。
* 返回类型
> new操作内存分配成功时,返回的是对象的类型指针,类型严格与对象匹配,无需类型转换,因此new是符合类型安全的操作符。而malloc内存分配成功则是返回void *,需要通过强制类型转换将void *指针转换成我们需要的类型。
* 分配失败
> new内存分配失败时,会抛出bac_alloc异常。malloc分配内存失败返回NULL。
* 自定义类型
> new会先调用operator new 函数,申请足够的内存(通常使用malloc实现)。然后调用类型的构造函数,初始化成员变量,最后返回自定义类型的指针。delete先调用析构函数,然后调用operator delete函函数释放内存(通常底层使用free实现)
* 重载
> C++允许重载new/delete操作符,特别的,布局new的就不需要为对象分配内存,而是指定了一个地址作为内存的起始区域,new在这段内存上为对象调用构造函数完成初始化工作,并返回此地址。malloc不允许重载。
* 内存区域
> new 操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是c++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序内存的动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。自由存储区不等于堆,如上所述,布局new就可以不位于堆中。
* 能够直观地重新分配内存
> malloc可以通过relloc进行内存重新分配实现内存扩充。new没有这样的直观配套设施来扩充内存。