定制自己的new 和 delete,讓對象在靜態塊上進行分配。
一般常見的new和delete操作符,就意味著使用堆進行內存分配,使用new操作符是名為operator new的函數調用,且函數返回返回一個指向某塊內存分配器分配內存指針。對于內存的分配到底從哪兒來沒有任何限制,它可能來自一個特殊的堆,也可能來自一個靜態分配的塊,也可能來自一個標準容器內部,也可能來自某個函數范圍的局部存儲區。而對于現在的各自軟件中主流內存管理方式,一般通過內存池的管理方式,它可能即包含靜態分配也同時包含動態分配。
其實網上關于內存池的設計很多,而本文主要簡單的實現是一個對象可以從一個靜態塊上進行分配。
設計思路
1.重載new 和delete,重寫自己的內存分配方式。
2.分配一大塊靜態數據,用于然后進行對象的管理。
3.對于對象分配的空間,釋放后通過一個鏈表來控制。
4.每次對象分配先從空閑的鏈表中分配,然后在從靜態塊中分配,如果空間不足,跑出異常。
5.并不會出現因分配空間失敗,釋放,以及內存泄露,所有的內存都在靜態常量區,在程序結束后自動釋放。
可以通過運行結果分析:
1. 2個對象的地址一樣,內存值地址也是一樣,對象可以進行靜態塊上的分配。
2. 不會存在內存泄露。
3. 浪費空間,碎片產生。
代碼如下 :

2

3

4

5

6

7

8



9



10

11



12

13

14

15

16

17

18

19

20


21

22


23

24

25



26


27

28

29

30

31



32

33

34

35

36



37

38

39

40

41



42

43

44

45

46

47



48

49

50

51


52

53

54

55


56



57


58



59

60

61

62

63

64

65



66


67

68


69

70

71

72


73



74


75

76

77

78


79

80

81

82

83

84

85

86

87

88



89

90

91

92

93

94

95

96

97

98

99

100

101

運行結果:
constructor
val values is 1 type values is 1
val values is 0041A170 type values is 0041A174
disconstructor
constructor
val values is 2 type values is 2
val values is 0041A170 type values is 0041A174
disconstructor
可以看出對象1,2地址一樣,且內存中存儲方式也一樣。
posted on 2009-08-16 19:47 expter 閱讀(2577) 評論(10) 編輯 收藏 引用 所屬分類: 其他學習筆記 、生活筆記 、算法與數據結構