C is basically a language in which you dimension your arrays at compile time - however, at run time you can call up
malloc or
calloc to grab a chunk of dynamic memory. This is very useful if you don't know how much space you'll need at compile time. We've several example in our
memory management module on our
C training courses.
But sometimes, you'll only gradually learn how much memory you need, even at run time. Take, for example, a simple example where you want to read a file into memory and then be able to go through it, many times, line by line. You won't know how many lines there are at the beginning ... so a single
malloc or
calloc won't do. But there are solutions.
First, you could use
realloc to extend the size of the memory block you have each time you add a new line.
Second, you could set up all your lines as linked lists, where each one contains a line of data and the address in memory of where the next line may be found.
The First option may lead to "thrashing" as memory is allocated and reallocated while the file is being read, with a large number of movements of the data between heap areas. And the second option may also be slow when you come to find data that's well down the list.
There is a
Third Way. You can use
realloc, but extend the size of the memory blocks in much more substantial chunks, and that's something that we did on today's course. The full source code may be found
here. The extra lines / critical lines are:
need = counter + 1;
if (have < need) {
info = realloc(info,(counter+16) * sizeof(char *));
have = counter+16;
}
Basically saying "if you haven't got enough space for another line, then grab space for 16 more ...
(written 2010-03-10)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
C212 - C and C based languages - Memory Management [1497] Training Season Starts again! - (2008-01-07)
[1581] What is an lvalue? (Perl, C) - (2008-03-18)
[1589] Dynamic Memory Allocation in C - calloc, realloc - (2008-03-22)
[1670] Dynamic Memory Allocation in C - (2008-06-09)
[1845] Passing a table from Lua into C - (2008-10-18)
[2848] C course - final course example puts it all together - (2010-07-02)
[3118] Arrays of arrays - or 2D arrays. How to program tables. - (2011-01-02)
[3144] Setting up arrays in C - fixed size at compile time, or dynamic - (2011-01-24)
[3386] Adding the pieces together to make a complete language - C - (2011-08-11)
[3416] Storing Tcl source code encoded, and running via your own C program - (2011-09-02)
[4128] Allocating memory dynamically in a static language like C - (2013-06-30)
[4340] Simple C structs - building up to full, dynamic example - (2014-12-03)
[4634] Regression testing - via a very short C testing framework - (2016-01-29)
[4635] Encapsulating logic in functions and structs - the C approach to Object Oriented techniques - (2016-01-30)
C050 - C and C based languages - C - General [2002] New C Examples - pointers, realloc, structs and more - (2009-01-20)
[2086] C Programming v Learning to Program in C. Which course? - (2009-03-17)
[2091] C, C++ and C# ... Java and JavaScript - (2009-03-20)
[2504] Learning to program in ... - (2009-11-15)
[2536] All the Cs ... and Java too - (2009-12-13)
[2763] Our C and C++ training course are on Open Source platforms - (2010-05-13)
[3053] Make - automating the commands for building and installing - (2010-11-16)
[3129] Extra courses - C and C++ - (2011-01-12)
[4335] Flexible public courses - residential or commuting, programming newcomer or experienced, C or C++ - (2014-11-30)
[4341] Segmentation Fault, Segmentation Violation, Bus Error, Stack Smashing - (2014-12-04)
[4434] Public training courses - upcoming dates - (2015-02-21)
Some other Articles
Multiple Inheritance in C++ - a complete exampleDear Planners, please provide viable alternativesMelksham - Carnival, Party in the Park, and Spot the OddityPointers to Pointers to Pointers - what is the point?Efficient use of dynamic memory - C and reallocIs it worth it?Web page to telephone calls / links using an iPhoneRandom thoughts on Melksham Town Planning and developmentEarly Spring walk in MelkshamOliver Cromwell at Bristol Temple Meads