我有一个用于在C中编写malloc的HW赋值。对于释放指针的整个算法的一部分,我需要减去我们正在使用的堆的地址然后进行一些位操作。所以我有以下两个声明,稍后在我的程序中定义。
void* heap;
metadata_t* ptr; //always < 8kb from heap
我的目标是获取堆的地址并从ptr中减去它,因为我执行的位操作只有在最左边的位为零时才有效。到目前为止,我所尝试过的所有内容都会导致错误。有谁知道我该怎么做?
答案 0 :(得分:0)
简短的回答是减法&#34;只是工作&#34;,并返回整数类型的结果。
#include <stdio.h>
int main(int argc, const char * argv[]) {
char string[] = "This is a test string";
char *a = string+8;
char *b = string+10;
long x = b-a;
printf("Hello, World! a and b are %ld bytes apart\n", x);
return 0;
}
更长的答案 - 如果您要进行很多算术运算,将指针强制转换为适当大的整数类型,请执行算术运算,然后将它们转换回指针。这本质上是不可移植的,但是您正在编写malloc,因此在关注列表中可移植性可能不高。
事情可能有点棘手,因为你可能想要一个无符号整数类型来保留指针的所有位,但是对C中的无符号类型进行算术可能很烦人。