假設有一片內存,大小為m*n, m是每個單元的大小,而且>=8,共有n個這樣的單元,如何將它們鏈接成n個節點的鏈表,要求不再使用任何其它內存空間。
這里給出SGI STL內存分配器的一個簡單實現:
首先定義一個union數據結構:
1 union obj {
2 union obj* free_list_link;
3 char client_data[1];
4 };
這個union結構體的最大大小為4bytes (在32bits 平臺上),8bytes (在64bits平臺上)。
假設那片內存的地址為chunk,那么我們可以這樣做:
1 obj* current_obj, *next_obj;
2 next_obj = (obj*)chunk;
3 for (int i = 0; ; i++) {
4 current_obj = next_obj;
5 next_obj = (obj*)((char*)next_obj + m);
6 if (n - 1 == i) {
7 current_obj -> free_list_link = 0;
8 break;
9 } else {
10 current_obj -> free_list_link = next_obj;
11 }
12 }
13