C++中new/delete和malloc/free行为推导
2023-12-17 05:07:13
面试中是不是经常被问道new和malloc的区别?
网上的答案也是五花八门,于是乎写了个程序验证一下
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
int main(int argc, char ** argv)
{
auto a = new int[10];
free(a); // 说明new出来的内存可以用free释放掉
int *b = (int*)malloc(10*sizeof(int));
delete b; // malloc出来的内存可用delete释放掉
auto c = new int[10];
delete c; // 数组不是非得用 delete []
auto d = new int[10];
delete [] d; // 标准写法
a[5] = 0;
b[5] = 0;
c[5] = 0;
d[5] = 5;
std::cout << "a=" << a << std::endl;
std::cout << "b=" << b << std::endl;
std::cout << "c=" << c << std::endl;
std::cout << "d=" << d << std::endl;
std::cout << "a[5]=" << a[5] << std::endl;
std::cout << "b[5]=" << b[5] << std::endl;
std::cout << "c[5]=" << c[5] << std::endl;
std::cout << "d[5]=" << d[5] << std::endl;
return 0;
}
/*******
> gcc test.cpp -lstdc++ -otest.x
> ./test.x
a=0x562412e9beb0
b=0x562412e9beb0
c=0x562412e9beb0
d=0x562412e9beb0
a[5]=5
b[5]=5
c[5]=5
d[5]=5
// 说明new和malloc都走的是操作系统的堆内存分配逻辑,即free回收的内存放入空闲块列表,下次声请内存从空闲列表中找相同大小的空闲内存块
*******/
上面这个程序可以说明几点:
1.new/delete内部实现使用的还是malloc和free的逻辑,也还是从heap上分配内存;
2.堆内存分配规则是寻址尺寸大小相近的空闲内存块;
文章来源:https://blog.csdn.net/ctbinzi/article/details/135040201
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!