All programming languages, other than Assembly have runtimes.
From the point of view of compiler design a runtime is everything required to support a programming language execution.
On C's case, calling main (), floating point emulation, initializing globals, parallel code execution, thread locals.
https://source.android.com/devices/tech/dalvik/#AOT_compilat...
Even with Android N, they are interpreted, JIT compiled with PGO, and eventually AOT compiled to native code when the device in not being used.
Also iOS supports LLVM bitcode with AOT compilation at iTune infrastructure since iOS 9.
Language runtimes have APIs, that is how they interact with compiler generated code.
Using pure C on iOS means calling the API entry points of the Objective-C runtime
https://developer.apple.com/reference/objectivec/objective_c...
All programming languages, other than Assembly have runtimes.
From the point of view of compiler design a runtime is everything required to support a programming language execution.
On C's case, calling main (), floating point emulation, initializing globals, parallel code execution, thread locals.