Right now I’m working on an implementation of malloc(), and would like to keep track of free blocks using a linked list. Except, I don’t know if the standard C libraries provide the programmer a “linked list”, but apparently C++ does.
Otherwise, can anyone lend a few pointers as to how a linked list should be implemented?
You can’t include a C++ header from a C file. But you can make use of C++ code from C.
mymodule.c wants to include C++ utility.h, but it can’t.
You write C_utility.h and C_utility.cpp. C_utility.h uses only C language features. It declares some functions and usually some opaque types that are presented to C basically as void pointers. (There are some better techniques that will let the C compiler at least check that the type matches, but not give it any information about the type.) The opaque types are actually pointers to C++ objects, but C doesn’t know that. You get the pointers out of the functions declared in the header, and you send them back in.
C_utility.cpp includes utility.h. C_utility.cpp contains C++ code. You can define classes. Only the function signatures from C_utility,h are limited to be C syntax. The function bodies can construct C++ classes and stuff.
mymodule.c includes C_utility.h.
You compile C_utility.cpp with the C++ compiler and mymodule.c with the C compiler. Both compilers produce .o files, and the linker is able to combine both kinds of .o file together.
For your purpose, you can make a C_linkedlist.h and C_linkedlist.cpp that expose a C interface for a linked list. Then you can make malloc.c that includes C_linkedlist.h. Or you can make C_malloc.h and C_malloc.cpp, with C_malloc.h only containing C syntax but C_malloc.cpp freely using C++.
By the way, I don’t think using the C++ linked list for malloc is a great idea. malloc can impact performance. It should really be tuned for really fast speed. C++ is pretty fast but adds a little bit of overhead because it does a few things for “niceness” that you might not need in a particular case.