@ -54,9 +56,10 @@ Those structures are quite common in most of the engines out there.
struct Music; [32 bytes] [+16 bytes] // Audio stream and music data pointer for streaming
```
raylib abuses the data pass-by-value on most of its functions, actually, only around 10% of the functions require dealing with data pointers. For this reason, I tried to keep data structures as small as possible, usually under 64 bytes size, and use internal pointers when data requires modification by some function (usually Load/Update/Unload functions).
raylib slightly abuses the ability to pass-by-value. In fact, only around 10% of its functions need to deal with data pointers. With this in mind, data structures are kept as small as possible (usually under 64 bytes), and internal pointers are used with functions that need to modify the data (usually *Load*, *Update* and *Unload* functions).
### raylib functions that modify data passed by reference
### raylib functions that require passing data by reference to be modified inside the function
```c
// core.c
char **GetDirectoryFiles(const char *dirPath, int *count); // Get filenames in a directory path (memory should be freed)