內存分配函數

30 篇文章 0 订阅
15 篇文章 0 订阅

------------------------------malloc、calloc、realloc、alloca-------------------------------------------
C語言的內存分配:靜態內存分配、動態內存分配
----------------------------------------------
靜態內存分配
--------------
內存在程序編譯的時候已經分配好,這塊內存在程序的整個運行過程中都存在(全局變量和static);
-----------------------------------------------------------------------------------------
在棧上創建
----------
在函數執行的時候,局部變量的存儲單元均可在站上創建,函數執行結束時,內存自動被釋放
------------------------------------------------------------------------------------
在堆上創建
-----------
程序在運行的時候利用malloc和new申請任意大小內存。用free或delete在任意時刻釋放內存
------------------------------------------------------------------------------------
malloc:分配的內存位於堆
-------
<malloc.h><stdlib.h>
聲明:void *malloc(int size);
申請的是連續區域
在分配內存之後,調用函數memset來初始化這部分的內存空間。
void*類型可以強制轉換為任何其他類型的指針。
malloc和new申請內存的不同有:
new返回指定類型的指針,並且可以自動計算所需大小。
malloc必須有我們計算需要的字節數,並且在返回后強行轉換為實際類型的指針。
malloc函數返回的是void*類型;函數的實參為sizeof(數據類型) ,用於指明類型數據所需要的大小;
----------------------------------------------------------------------------------------
free
----
free(指針);正確釋放指針指向的任何大小的空間。
但是對於new,則有不同。
new/delete、new[]/delete[]、malloc/free 三對必須配套使用
---------------------------------------------------------------------------------------------
calloc
-------
申請的是連續區域
void *calloc(size_t numElements,size_t sizeOfElement); 
函數有兩個參數:元素的數目和每個元素的大小。兩個參數的乘積就是要分配空間的大小;
如果調用成功,函數malloc和calloc都返回所分配的內存空間的首地址。
malloc不能初始化所分配的內存空間,calloc可以(每一位都初始化為零)。
---------------------------------------------------------------------------------------------
realloc:對malloc申請的內存進行調整
----------
申請的是連續區域,加上老區域
extern void *realloc(void *mem_address, unsigned int newsize);
改變mem_address所指內存區域大小為newsize長度。
若分配成功,返回指針,否則返回NULL
使用free釋放。
------------------------------------------------------------------------------
alloca:向棧申請內存,無需釋放。
GlobalAlloc:從堆上分配指定數目的字節。
參數:dwBytes:指定分配的字節數,uFlag:標記,指定分配內存的方式。
--------------------------------------------------------------------
GlobalLock加鎖/GlobalUnlock解鎖/GlobalRealloc重新分配
-----------------------------------------------------
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值