Home PC Games Linux Windows Database Network Programming Server Mobile  
  Home \ Programming \ Composition and dynamic memory allocation C program     - Linux, C programming language library file handling and preparation of Makefile (Programming)

- Spark and Hadoop comparison (Server)

- How do I delete a NEEDS RECOVERY rollback state of undo tablespace (Database)

- Deploy Apache Spark cluster environment in Ubuntu (Server)

- Customize the 404 error page Nginx (Server)

- Phoenix agents use P2P WebRTC development (Programming)

- Linux process group, session daemon (Linux)

- VirtualBox CentOS is configured as a local disk mirroring software source (Linux)

- OpenSSL for secure transmission and use of skills of files between Windows and Linux (Linux)

- Linux script commands - terminal recorder (Linux)

- Linux crontab command format example (Linux)

- Analysis of Java in the deep copy and shallow copy (Programming)

- How to extend / remove swap partitions (Linux)

- CentOS 6.4 RPM install MySQL-5.6.22-1 (Database)

- Learning UNIX good habits (Linux)

- Android Studio commonly used shortcuts and how to follow the Eclipse Shortcuts (Linux)

- MySQL5.7 JSON type using presentation (Database)

- How to install CentOS 7.x in OpenERP (Odoo) (Linux)

- Python system default encoding (Programming)

- Ubuntu install Oracle 10g process and problem solution (Linux)

  Composition and dynamic memory allocation C program
  Add Date : 2018-11-21      
  For a program, the general understanding is that the source code compiled into machine code, and then interpret run through the machine. But how is compiled into machine code, and how it works, no doubt, is a question worth exploring. How compiled into machine code, the process is to compile the source code, linking, the compiler to do these things. And how to run, which is not single-handedly own the device can be done. Machine code to run on the machine, you have to request hardware resources. Involving the most is the CPU and memory. CPU logic control and computing, memory for fast interactive place during the operation of the data.

A C program from the point of view of the code structure itself, but after the compiler is a piece of code. And this code is loaded from disk into memory system is called the code segment or a text segment (code / text segment) place. Text segment in memory is shared. So, when we run multiple processes of the same program in memory, only a copy of the program code. Of course, in order to prevent people to do bad things, permission text segment often are read-only.

Only a strategy, while men generals without soldiers on the battlefield is the do nothing. Code, of course, not all purely logical description. Also we have to have the role of logic objects and results - data. That program variables. Different variables, status in the program looks in addition to the scope and lifetime, but much the same. However, their implementation is indeed very different.

Program uninitialized global variables are stored in a data segment is called uninitialized place. That is, bbs (block started by symbol) segments. At the same time, the kernel will automatically remove data in this segment is initialized to zero or null pointer. For example, outside the function declaration:

int sum [10];

So that the variable is stored in the bbs section.

Since there is uninitialized global variables, of course, also have to initialize the global variables. They are stored in a place called the initialized data section (often referred to as data segments). Life cycle have global scope of the whole program. (? Right) include any statement outside the function:

int tmp = 99;

So that the variable is stored in the data segment.

Of course, there is a thing called the stack segment. Automatic variable and each function call is required to save the information are stored here. Stack is characterized by last-out (FILO) and data stored in the short period that push and pop operations are frequent. Automatic variables are often used as temporary variables exist, there is a short period, so when placed on the stack. (Right?) And field information function call, you can use the FIFO stack characteristics very convenient for the protection and recovery. Typically, a recursive implementation is to use the stack because the stack is a layer of growth downward, so the subroutine is not overwrite the parameters of the calling function. To give special attention to the fact that the main function main variables, but also automatic variables. Because the main function is the function ah!

Finally, as the C and C ++ specific dynamic memory allocation. At runtime, use dynamic heap memory allocation. So dynamically allocated memory has a global scope (assigned from the beginning). The lifetime but until it is released before. Dynamic memory allocation, in fact, a request to the kernel memory resources are released, that is, the resources returned to the kernel. So dynamically allocated memory must be released when no longer needed. Otherwise it may cause annoying problems and dynamic allocation of memory leaks and other failures.

See here, we can find. A C program, its code is loaded into the code segment of memory, and its code segment variables one by one, and there is no actual store data, depending on how it is stored in the bbs segment, data segment, stack segment and heap snippet variable is stored in a pointer to the actual storage of various parts of the pointer.

Let me say a C dynamic memory management. In C, the main function of several standard header < stdlib.h> defined in the memory management:

void * malloc (size_t size)

void * calloc (size_t nobj, size_t size)

void * realloc (void * p, size_t size)

void * free (void * p)

The above four function that returns a void * pointer. In C, void * pointer can receive any type of pointer, at the same time, may not be passed directly through to cast any type of pointer. In C ++, the case of the former, the latter must be cast.

Let us talk about malloc, it receives a parameter of type size_t as the size of memory request in bytes. Therefore, memory allocation, it is common to use the sizeof operator to obtain the type of data to be allocated size. Such as:

int * p = malloc (sizeof (int));

As an int pointer p is assigned a defined memory area.

calloc function is used to allocate memory for an array object, the first parameter is the size of the array, the second parameter is the size of each data type. Usually calloc used much, can directly replace malloc.

realloc function for adjusting the size of the allocated memory. When you find your current memory too much or too small, you can use realloc to adjust the memory.

All three memory allocation function failure returns NULL, so you can check the return value to determine the memory allocation is successful.

Finally, free function for releasing the above three functions dynamically allocated memory. And must be released.

Achieve C memory allocation function is accomplished by the system. Therefore, different systems have different implementations. UNIX-like systems, usually called by the sbrk system to achieve. (more detail?)

In C ++, memory management with major operators new and delete. C is relatively more convenient, and more efficient. However, there was a place I did not understand is why the STL memory manager to write a single allocator to achieve. Or new and delete is not strong enough? Ah, after all, do not understand the new and delete implementation.
- Fedora network set up simple (Linux)
- Composition and dynamic memory allocation C program (Programming)
- NFS-based services and service utilization Corosync DRBD high availability cluster configuration, respectively (Server)
- Remote installation of Net-SNMP whole process (Linux)
- To remove those IP is prohibited Fail2ban on CentOS 6/7 (Server)
- Dalvik heap memory management and recycling (Linux)
- Several Methods of SSH Auto - login (Linux)
- Ubuntu is expected to allow you to install the latest Nvidia Linux drivers easier (Linux)
- CentOS Set the Mono environment variable (Server)
- CentOS7 iptables (Linux)
- Linux into single user mode to modify the administrator password (Linux)
- RealVNC Server 5.2.3 Installation and Configuration In Fedora (Server)
- To install the latest version of the EPEL on CentOS 5.x or 6.x (Linux)
- C ++ handling text input (Programming)
- Linux System Tutorial: How to browse the Linux command line, weather forecast (Linux)
- To create someone else can not afford to delete the administrator user (Linux)
- tar decompression problems gzip: stdin: not in gzip format (Linux)
- The OpenGL ES GLFW window structures (Programming)
- Examples of testing and installation Mesos on CentOS (Linux)
- Ubuntu 14.04 can be used to create a WIFI hotspot for Android (Linux)
  CopyRight 2002-2022 newfreesoft.com, All Rights Reserved.