melloc是怎么分配内存的
时间: 2023-03-24 08:04:22 浏览: 103
melloc 是通过调用系统函数 malloc() 来分配内存的。malloc() 函数会在内存中找到一块足够大小的空间,并返回该空间的首地址。melloc 会将该地址保存下来,以便后续使用。需要注意的是,使用完毕后,必须调用 free() 函数来释放该内存空间,否则会造成内存泄漏。
相关问题
是通过melloc来分配的吗? 还是其他方法
在 Linux 内核中,per-CPU 变量的分配和管理并不是通过 `malloc()` 或 `new` 等动态内存分配函数来实现的,而是通过一个特殊的内存分配函数 `alloc_percpu()` 来进行的。
`alloc_percpu()` 函数是 Linux 内核中的一个内存分配函数,它可以为每个 CPU 分配一个指定大小的内存块,并返回一个指向 per-CPU 变量的指针数组。例如,如果要为一个 `int` 类型的 per-CPU 变量分配内存,可以使用如下代码:
```
int __percpu *my_variable = alloc_percpu(int);
```
这行代码会为每个 CPU 分配一个 `int` 类型的变量,并返回一个指向 `int` 类型的指针数组 `my_variable`。这个指针数组中的每个指针都指向一个特定的内存地址,这个内存地址存储了对应 CPU 的变量副本。
需要注意的是,`alloc_percpu()` 函数分配的内存是按照 CPU 的个数进行划分的,并且每个 CPU 的内存块都是连续的。这样,就可以避免在不同 CPU 访问同一个变量时的竞争和同步问题。
在使用 per-CPU 变量时,可以使用一些特殊的函数接口来进行访问,例如 `get_cpu_var()`、`put_cpu_var()` 和 `this_cpu_ptr()` 等等。这些函数会根据当前 CPU 的编号来选择相应的变量副本,并返回对应的指针。这样,每个 CPU 都可以独立地访问自己的变量副本,而不会产生竞争和同步问题。
new和melloc 的区别
new和malloc都是用来在程序中动态分配内存空间的函数。
1. new是C++中的运算符,而malloc是C语言中的库函数。所以,在使用C++编程时,应该使用new来动态分配内存,它与删除运算符delete是一对,可以方便地创建和销毁对象。而在使用C编程时,malloc和free是一对,用于分配和释放内存。
2. new比malloc更智能,它可以自动计算需要分配的内存大小,并进行类型转换。而malloc只是分配一块指定大小的连续内存空间,并返回指向该空间的指针。因此,在使用malloc时,我们需要手动计算所需内存大小,并使用类型转换函数(如(void*))来适应不同类型的指针。
3. new运算符可以调用构造函数来初始化分配的内存,而malloc无法做到这一点。因此,如果需要在动态分配的内存上执行构造函数的初始化操作,应该使用new。类似地,delete运算符可以调用析构函数来释放内存,而free函数不会调用对象的析构函数。
4. 使用new分配的内存空间需要通过delete来释放,而使用malloc分配的内存空间需要通过free来释放。释放内存是程序员的责任,如果忘记释放内存,就可能导致内存泄漏问题。
综上所述,new和malloc在使用方式和功能方面有一些区别。根据不同的编程语言和需求,我们可以选择合适的函数来进行动态内存分配。