#include #include #include #include #include #include #include #include #include static void show_ram_available(const char* prefix) { // From fish: display how much memory free in the system. errval_t err; genpaddr_t available, total; err = ram_available(&available, &total); if (err_is_fail(err)) { USER_PANIC_ERR(err, "ram_available in show_ram_available()"); } printf("%s System memory: free: %" PRIuGENPADDR " bytes, " "total: %" PRIuGENPADDR " bytes\n", prefix, available, total); } size_t bytes_needed = ((size_t) 8192) * 1024 * 1024; /* 8 GB */ int main() { show_ram_available("[BEFORE]"); // allocate frame struct capref frame; size_t frame_size; errval_t err = frame_alloc(&frame, bytes_needed, &frame_size); if (err_is_fail(err)) { USER_PANIC_ERR(err, "frame_alloc in big_malloc:main()"); } // Unsure, but documentation for frame_create mentions "minimum size". assert(frame_size >= bytes_needed); printf("Allocated frame of %zu bytes.\n", frame_size); // map frame void *virt_addr; err = vspace_map_one_frame(&virt_addr, frame_size, frame, /* memobj */ NULL, /* vregion */ NULL); if (err_is_fail(err)) { USER_PANIC_ERR(err, "vspace_map_one_frame in big_malloc:main()"); } printf("Mapped frame at %p.\n", virt_addr); // check we can touch it. memset(virt_addr, 0x12345678, frame_size); show_ram_available("[AFTER]"); return 0; }