Please consider this C code:
I've an array of a struct on the stack. This struct has 3 fixed-length array of characters. Since it's on stack, memory is all pre-allocated and I don't have to worry about c/malloc
or free
ing.
#include <stdio.h>
#include <stdio.h>
#include <string.h>
struct memberStruct {
int Field1;
char Name[128];
char Token[128];
char Secret[128];
int Epoch;
int Age;
int Zip;
int Devices;
int Leaves;
};
struct memberStruct members[8192] = { 0 };
void printMember(struct memberStruct *member);
int main() {
printf("size of members: %d\n", sizeof(members));
printMember(&members[0]);
struct memberStruct *ptr = &members[1];
printf("member0 is at %p\n", ptr);
memcpy(ptr->Name, "Member 1 Name", 32);
printMember(ptr);
printMember(&members[1]);
return 0;
}
void printMember(struct memberStruct *member) {
printf("This is member at %p\n", member);
printf("member Name: %s, Age: %d, Zip: %d, Secret: %s\n", member->Name, member->Age, member->Zip, member->Secret);
}
I find this convenient. But when you run it,
$ ./question
size of members: 3342336 // <-- THIS!
This is member at 0x21030
member Name: , Age: 0, Zip: 0, Secret:
member0 is at 0x211c8
This is member at 0x211c8
member Name: Member 1 Name, Age: 0, Zip: 0, Secret:
This is member at 0x211c8
member Name: Member 1 Name, Age: 0, Zip: 0, Secret:
You can see it takes ~3.3MB of memory, a lot on the stack, which brings me to the question:
Is there a way I can create this array of struct on the heap (with mem set aside for the members with fixed-length array of chars)?