如果我有*p = malloc(1000),我想将内存p分成200和300的块,并获取块的地址并使用它.有没有简单的方法来做到这一点?
你有没有理由......
char* firstblock = malloc(200);
char* secondblock = malloc(300);
char* thirdblock = malloc(500);
如果你想采取你的方法,你可以做到
char* wholething = malloc(1000);
char* firstblock = wholething;
char* secondblock = wholething + 200;
char* thirdblock = wholething + (200 + 300);
但它对我来说没有多大意义.
我建议使用单独块的第一个原因是因为你可以在完成它时释放一个块.如果你无论如何都要在同一时间释放所有这些,那么它可以在较少的函数调用方面略微提高性能,但这种好处可以忽略不计.第二个原因是你的系统可能比一个较大的块更快乐,因为一个大块也不适合页面.虽然可以说相反,因为必须跟踪更少的块.但是,在大多数情况下,性能优势或影响是如此轻微,以至于您采用哪种方法并不重要.所以第三个原因,即可读性,就是我说使用单个块的原因.
请记住,偏移量可能需要也可能不需要乘以尺寸.
在这种情况下,是的......
char* wholething = malloc(1000 * sizeof(int));
int* firstblock = wholething;
int* secondblock = wholething + 200;
int* thirdblock = wholething + (200 + 300);
但在这种情况下,没有......
int* wholething = malloc(1000 * sizeof(int));
int* firstblock = wholething;
int* secondblock = wholething + 200;
int* thirdblock = wholething + (200 + 300);