Gerando funções em tempo de execução em C

Eu gostaria de gerar uma função em tempo de execução em C. E por isso quero dizer essencialmente gostaria de alocar alguma memória, aponte para ele e executá-lo via ponteiro de função. Eu percebo que este é um tópico muito complexo e minha pergunta é ingênua. Eu também percebo que existem algumas bibliotecas muito robustas que fazem isso (por exemplo,nanojit).

Mas eu gostaria de aprender a técnica, começando com o básico. Alguém poderia me dar um exemplo muito simples em C?

EDITAR: A resposta abaixo é ótima, mas aqui está o mesmo exemplo para o 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;
}