Skip to Content
LINUX系統程式設計 第二版
book

LINUX系統程式設計 第二版

by Robert Love
December 2013
Intermediate to advanced
496 pages
8h 57m
Chinese
GoTop Information, Inc.
Content preview from LINUX系統程式設計 第二版
320
|
第九章
return p;
}
調整記憶體分配的尺寸
C 語言提供了一個介面,可用於調整既有記憶體分配的尺寸(變大或變小):
#include <stdlib.h>
void * realloc (void *ptr, size_t size);
執行成功時,
realloc()
會把
ptr
所指向之記憶體範圍的尺寸調整為新尺寸
size
個位元
組。它會傳回一個指標,指向剛調整過尺寸的記憶體範圍,這個指標可能跟
ptr
一樣,
也可能不一樣。擴大一個記憶體範圍時,如果
realloc()
無法在原處透過擴張團塊的方
式來擴大既有的記憶體團塊,則此函式會分配一個新的記憶體範圍(長度為
size
個位元
組),然後把舊範圍的內容複製到新範圍,並且釋出舊的範圍。不管是哪種情況,記憶
體範圍的內容被保存下來的部分,取決於舊尺寸與新尺寸中最小者。因為可能會進行複
製操作,所以使用
realloc()
擴大一個記憶體範圍,可能是一個代價相當高的行動。
如果
size
的值為
0
,則結果如同針對
ptr
調用
free()
如果
ptr
的值為
NULL
,則此操作的結果如同
malloc()
。如果
ptr
的值非
NULL
,它必須是
之前所進行之
malloc()
calloc()
realloc()
呼叫的傳回值。
執行失敗時,
realloc()
會傳回
NULL
以及把
errno
設定為
ENOMEM
。而且
ptr
所指向之記憶
體的狀態不會改變。
讓我們來看一個縮小記憶體範圍的例子。首先,我們會使用
calloc()
分配足夠的記憶體
範圍,以便存放具有兩個元素之
map
結構(所構成的)陣列: ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

AGILE學習手冊 | SCRUM、XP、精實和看板方法

AGILE學習手冊 | SCRUM、XP、精實和看板方法

Andrew Stellman, Jennifer Greene
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
算法技术手册(原书第2 版)

算法技术手册(原书第2 版)

George T.Heineman, Gary Pollice, Stanley Selkow

Publisher Resources

ISBN: 9789862769812