malloc(0)
来源:互联网 发布:js 特殊字符校验 编辑:程序博客网 时间:2024/05/19 00:51
原来...
malloc的内存分配之 malloc(0)的内存分配情况
#include<iostream>
using namespace std;
int main()
{
char *p;
if((p=(char *)malloc(0))==NULL)
puts("got a null pointer");
else
puts("got a valid pointer");
}
答案:got a valid pointer
首先:
在标准的malloc实现中,并不检查输入值的大小,而是将输入值做对齐操作后直接从堆上分配空间。
其次:
不论输入值的大小为多少,在malloc的内部最小的内存分配大小是一个定值(一般是8B),因为malloc需要用这部分空间来维护堆上的内存块链表。所以当用户申请一块0B的空间时,malloc实际分配的空间是8B,如果用户申请的空间是X,则malloc实际分配的空间是(对齐(X) + 8)。这也是为什么malloc分配的空间千万不能越界使用的原因:堆的内部链表结构将被破坏。
另外对于new和delete malloc和free这样的内存分配与释放函数:到底delete和free是怎么知道要释放掉多少内存的呢?
其实在new和malloc内存分配成功时,系统出除了返回一个指向这块内存的指针外,还会获得一块用于记录此处分配的内存大小的内存块:
0 0
- malloc(0)?
- malloc(0)
- malloc(0)
- malloc(0)
- malloc(0)
- malloc(0)
- malloc(0)
- malloc (0)
- malloc(0)
- malloc(0)
- malloc(0)
- malloc(0)的问题
- malloc(0)的问题
- malloc (0)详解
- malloc(sizeof(0))问题
- malloc(0)的问题
- malloc (0)详解
- malloc(0)的问题
- 机试算法讲解: 第49题 动态规划之最长递增子序列问题
- 【练习笔记】剑指offer-面试题7 :用两个栈实现队列
- Cocos2d-x_C++11新特性Lambda表达式
- Matlab中varargin函数
- hdu5319 Painter
- malloc(0)
- 机试算法讲解:第50题 动态规划之拦截导弹
- poj-3083 Children of the Candy Corn-DFS+BFS
- leetcode--Kth Smallest Element in a BST
- 多线程(join和yield)
- Lucene七(搜索)
- Servlet学习
- NYOJ269VF【dp】
- 回溯法解决N皇后问题