Hacker News new | ask | show | jobs
by jitl 711 days ago
The quickjs interpreter C code counts the bytes it's allocated, and refuses to allocate more if over the limit. It decrements by the allocation size when freed. This malloc function is used everywhere the interpreter allocates memory:

    static void *js_def_malloc(JSMallocState *s, size_t size)
    {
        void *ptr;
    
        /* Do not allocate zero bytes: behavior is platform dependent */
        assert(size != 0);
    
        if (unlikely(s->malloc_size + size > s->malloc_limit))
            return NULL;
    
        ptr = malloc(size);
        if (!ptr)
            return NULL;
    
        s->malloc_count++;
        s->malloc_size += js_def_malloc_usable_size(ptr) + MALLOC_OVERHEAD;
        return ptr;
    }