c - 如何将malloc内存划分为c中的 block

标签 c memory-pool

如果我有*p=malloc(1000),我想把内存p分成200和300 block ,得到 block 的地址并使用它。有什么简单的方法可以做到这一点吗?

最佳答案

有没有你不做的原因...

char* firstblock = malloc(200); char* secondblock = malloc(300); char* thirdblock = malloc(500);

如果你想采用你现在的方法,你可以这样做

char* wholething = malloc(1000); char* firstblock = 整体; char* secondblock = wholething + 200; char* thirdblock = wholething + (200 + 300);

但这对我来说意义不大。

我推荐使用单独 block 的第一个原因是当你用完一个 block 时你可以释放它。如果您无论如何同时释放所有这些,那么它确实可以在更少的函数调用方面稍微提高性能,但这种好处可以忽略不计。第二个原因是你的系统可能更喜欢几个小块而不是一个大块,因为大块也不适合页面。尽管可以说相反,因为必须跟踪的 block 更少。不过,再次重申,在大多数情况下,性能优势或影响非常小,以至于您采用哪种方法都无关紧要。所以第三个原因,可读性,就是为什么我说要使用单独的 block 。


请记住,偏移量可能需要也可能不需要乘以大小。

在这种情况下,是的......

char* wholething = malloc(1000 * sizeof(int)); int* firstblock = 整体; int* secondblock = wholething + 200; int* thirdblock = wholething + (200 + 300);

但在这种情况下,不...

int* wholething = malloc(1000 * sizeof(int)); int* firstblock = 整体; int* secondblock = wholething + 200; int* thirdblock = wholething + (200 + 300);

关于c - 如何将malloc内存划分为c中的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22746162/

相关文章:

c - OSX 上的总线错误 - pthreads

c++ - boost::pool 实内存分配

c - 在没有 WdfDeviceCreateDeviceInterface 的情况下为 Windows HID 驱动程序初始化设备接口(interface)

c - 带有 ctags 和 omnicomplete 的 Vim 没有完成 C 结构字段

tomcat - Eden空间在哪里设置?

c - 增长(和收缩)内存池

C++11内存池设计模式?

c++ - 基于文件的内存池——这可能吗?

c - 单击按钮打开图像文件到矩形

c - 使用内核模块读写 Arduino 串口