Generowanie funkcji w czasie wykonywania w C

Chciałbym wygenerować funkcję w czasie wykonywania w C. Mam na myśli, że zasadniczo chciałbym przydzielić trochę pamięci, wskazać na nią i wykonać ją za pomocą wskaźnika funkcji. Zdaję sobie sprawę, że to bardzo złożony temat i moje pytanie jest naiwne. Zdaję sobie również sprawę z tego, że istnieją bardzo solidne biblioteki, które to robią (np.nanojit).

Ale chciałbym nauczyć się tej techniki, zaczynając od podstaw. Czy ktoś, kto ma wiedzę, da mi bardzo prosty przykład w C?

EDYTOWAĆ: Odpowiedź poniżej jest świetna, ale oto ten sam przykład dla systemu Windows:

#include <Windows.h>

#define MEMSIZE 100*1024*1024
typedef void (*func_t)(void);

int main() {

    HANDLE proc = GetCurrentProcess();
    LPVOID p = VirtualAlloc(
        NULL,
        MEMSIZE,
        MEM_RESERVE|MEM_COMMIT,
        PAGE_EXECUTE_READWRITE);

    func_t func = (func_t)p;
    PDWORD code = (PDWORD)p;
    code[0] = 0xC3; // ret

    if(FlushInstructionCache(
        proc,
        NULL,
        0))
    {
        func();
    }

    CloseHandle(proc);
    VirtualFree(p, 0, MEM_RELEASE);
    return 0;
}

questionAnswers(3)

yourAnswerToTheQuestion