/[dtapublic]/projs/trunk/projs/20120418_blackjacksim/source/auxprogs/malloc_test/malloc_test.c
ViewVC logotype

Contents of /projs/trunk/projs/20120418_blackjacksim/source/auxprogs/malloc_test/malloc_test.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 36 - (show annotations) (download)
Tue Oct 11 03:31:12 2016 UTC (8 years ago) by dashley
File MIME type: text/plain
File size: 6648 byte(s)
"swprojs" renamed to "projs" to reflect that some projects are not software-based or don't involve
software source code.
1 //====================================================================================================
2 //$Header: /home/dashley/cvsrep/e3ft_gpl01/e3ft_gpl01/dtaipubs/cron/2010/blackjack_201010/source/auxprogs/malloc_test/malloc_test.c,v 1.7 2012/03/11 16:31:29 dashley Exp $
3 //====================================================================================================
4 //The purpose of this program is to ensure that the target system can allocate at least 1G of memory
5 //in fairly small chunks.
6 //
7 //This program was used to evaluate the Cygwin C development environment on my PC before beginning
8 //work on the "bjcceval" program. It was determined the Cygwin will successfully allocate about 2G
9 //of memory. This is more than adequate, and 1G is probably enough. Systems that won't allow at
10 //least 1G to be allocated via malloc() may be problematic. In any case, the "bjcceval" program
11 //will provide an error message if it runs out of memory (rather than a logical error affecting the
12 //results).
13 //====================================================================================================
14 #include <malloc.h>
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <string.h>
18
19
20 #define ALLOC_CHUNK (1024U) //1K
21 #define ALLOC_NUM (1048576U) //1M
22 #define ITERATIONS (1000U)
23
24 struct base_struct
25 {
26 struct base_struct *next;
27 void *chunk;
28 };
29
30
31 typedef struct base_struct NODE;
32
33
34 int main(void)
35 {
36 unsigned i;
37 unsigned iteration;
38 NODE *head = NULL;
39 NODE *cur = NULL;
40
41 //=================================================================================================
42 //=================================================================================================
43 //=================================================================================================
44 printf("Execution begins.\n");
45
46 //=================================================================================================
47 //=================================================================================================
48 //=================================================================================================
49 printf("==============================================================================\n");
50 printf("This program will attempt to allocate and deallocate about 1 gigabyte of\n");
51 printf("dynamic memory using malloc() and free(), %u times. This test should\n", ITERATIONS);
52 printf("detect any gross anomalies in the computing environment.\n");
53 printf("==============================================================================\n");
54 printf("CVS version control information for the .c source file:\n $RCSfile: malloc_test.c,v $\n $Revision: 1.7 $\n $Date: 2012/03/11 16:31:29 $\n");
55 printf("==============================================================================\n");
56
57 for (iteration = 0; iteration < ITERATIONS; iteration++)
58 {
59 printf("Iteration number %u/%u.\n", iteration+1, ITERATIONS);
60 printf("Attempting to allocate %u elements of a linked list, each occupying %u bytes.\n",
61 ALLOC_NUM,
62 (unsigned)(sizeof(NODE) + ALLOC_CHUNK));
63
64 for (i=1; i<=ALLOC_NUM; i++)
65 {
66 //Explain to the user what is going on.
67 if ((i % 100000) == 0)
68 {
69 printf(" Allocating NODE number %u.\n", i);
70 }
71
72 //Allocate the NODE base.
73 cur = malloc(sizeof(NODE));
74 if (!cur)
75 {
76 printf("FAILURE: Out of memory.\n");
77 return(1);
78 }
79
80 //No child right now.
81 cur->next = NULL;
82
83 //Allocate the chunk.
84 cur->chunk = malloc(ALLOC_CHUNK);
85 if (!(cur->chunk))
86 {
87 printf("FAILURE: Out of memory.\n");
88 return(1);
89 }
90
91 //Write the chunk. This is just to trigger an exception
92 //hopefully if the allocation system of the target is somehow
93 //defective.
94 memset(cur->chunk, i, ALLOC_CHUNK);
95
96 //Link the NODE into the list.
97 if (!head)
98 {
99 //First one--easy.
100 head = cur;
101 }
102 else
103 {
104 //Not the first one.
105 cur->next = head;
106 head = cur;
107 }
108 }
109
110 //==============================================================================================
111 //==============================================================================================
112 //==============================================================================================
113 //Count the nodes and walk them, just to be sure no surprises.
114 printf("Counting nodes to be sure all accounted for ... ");
115
116 i = 0;
117 cur = head;
118
119 while (cur)
120 {
121 i++;
122 cur = cur->next;
123 }
124
125 if (i != ALLOC_NUM)
126 {
127 printf("\nFAILURE: Node miscount.\n");
128 return(1);
129 }
130 else
131 {
132 printf("OK.\n");
133 }
134
135 //==============================================================================================
136 //==============================================================================================
137 //==============================================================================================
138 //Deallocate the nodes.
139 printf("Deallocating nodes ... ");
140
141 while (head)
142 {
143 cur = head;
144 head = head->next;
145 free(cur->chunk);
146 free(cur);
147 }
148
149 printf("OK.\n");
150 printf("Test successful.\n");
151 }
152
153 return(0);
154 }
155
156
157 //====================================================================================================
158 //$Log: malloc_test.c,v $
159 //Revision 1.7 2012/03/11 16:31:29 dashley
160 //Iterations increased to 1000.
161 //
162 //Revision 1.6 2012/03/11 16:30:35 dashley
163 //Minor changes.
164 //
165 //Revision 1.5 2012/03/11 16:29:24 dashley
166 //Version control information enhanced.
167 //
168 //Revision 1.4 2012/03/11 16:27:26 dashley
169 //Version control information added.
170 //
171 //Revision 1.3 2012/03/11 16:24:13 dashley
172 //Iterations added.
173 //
174 //Revision 1.2 2012/03/11 16:09:34 dashley
175 //Cosmetic edits.
176 //
177 //Revision 1.1 2012/03/11 15:26:09 dashley
178 //Initial checkin.
179 //====================================================================================================
180 //End of $RCSfile: malloc_test.c,v $.
181 //====================================================================================================

dashley@gmail.com
ViewVC Help
Powered by ViewVC 1.1.25