Passing structs to functions
suggest changeIn C, all arguments are passed to functions by value, including structs. For small structs, this is a good thing as it means there is no overhead from accessing the data through a pointer. However, it also makes it very easy to accidentally pass a huge struct resulting in poor performance, particularly if the programmer is used to other languages where arguments are passed by reference.
struct coordinates { int x; int y; int z; }; // Passing and returning a small struct by value, very fast struct coordinates move(struct coordinates position, struct coordinates movement) { position.x += movement.x; position.y += movement.y; position.z += movement.z; return position; } // A very big struct struct lotsOfData { int param1; char param2[80000]; }; // Passing and returning a large struct by value, very slow! // Given the large size of the struct this could even cause stack overflow struct lotsOfData doubleParam1(struct lotsOfData value) { value.param1 *= 2; return value; } // Passing the large struct by pointer instead, fairly fast void doubleParam1ByPtr(struct lotsOfData *value) { value->param1 *= 2; }
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents