假设有一片内存,大小为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