At the beginning of the 70’s in the 20th century, for the need of the operating system Unix, was developed C, programming language, by Ken Thompson and Dennis Ritchie. Even though it is relatively old language, it is one of the most popular programming languages nowadays. It is one of the most used languages in software system area and it is widespread when creating apps. It is low-level, compiled and relatively minimalistic language.
C language is sufficiently powerful to most of system programming, to which belongs drivers and core of the operating system.
There are many more modern programming languages existing, which have been inspired by syntax of C language, e. g. C++, Java, Perl or PHP.
For the data storage in C can be used 3 options: static allocation of memory during translation, automatic allocation of memory to the stack and dynamic allocation on the heap using the library functions.
The language shows only minimal abstraction above allocation: the work with memory is going on with the data type called indicator, which takes over a link to the memory space of the data type variable and it is possible to do arithmetic operations on it at the same time, i.e. operations, which don’t operate with indicators directly on the level of individual bytes, but it looks onto the size of the data type, to which they refer to, but simultaneously there exists void type indicators, which can then link to any type of data saved in memory. Indicators can exist independently on variables, to which they link to, and it is the programmer’s responsibility, so they wouldn’t link to the unallocated memory.
Indicators in C language are a powerful tool, because this language allows not only indicators to data, but also to functions. Indicators, in terms of portability and risk of the program collapse, are Achilles heel of language, if they are used incorrectly.
On the other hand, it also means, that the programmer has a full responsibility for the allocation of memory, thanks to that the program is not dependent on automatic deallocator of memory, i.e. garbage collector. Languages like Java or C#, which are both derived from C language, are both using the way of linking allocated variables, which are less universal, but decreases probability of mistakes in the programs. Language C++, which originated as an original expansion of C language, preserves programmer’s responsibility for the memory allocation. There is an option to choose between both attitudes but only in C++11 standards and higher.