问题背景:
在做动态内存分配时,每一个内存区域都是链表上的一个节点,区域的开头都是一个结构体,提供一些关于该区域的信息,通常包括指向下一个节点的指针,指向上一个节点的,一个标记用来指示区域是否已分配,区域的大小,以方便内存的管理。就遇到一个将一个结构体写入某个特定的内存地址的问题。
解决方法:
比如,设节点为 struct node,内存区域的开头由指针char *head指示,需要在开头处便宜1024字节处写入一个节点结构,可以使用c的强制类型转换
struct node *destnode = (struct node *)(head + 1024);
这样我们也就可以通过引用结构指针destnode来向那个区域写入数据。
c程序设计语言里,free()函数的实现,就用的强制类型转换来获得关于所要释放的内存块的信息。比如要释放的是指针mem指向的内存,它的实现很类似于这样:
struct node *mnode = (struct node *)mem;
mnode -= 1;
减少一个步长从而获得了关于内存块的信息。
阅读(2126) | 评论(0) | 转发(0) |