# mcmodel

Tells the compiler to use a specific memory model to generate code and store data.

## Architecture Restrictions

Only available on Intel® 64 architecture

## Syntax

Linux: | -mcmodel=mem_model

macOS: | None

Windows: | None

## Arguments

mem_model | Is the memory model to use. Possible values are:
small | Tells the compiler to restrict code and data to the first 2GB of address space. All accesses of code and data can be done with Instruction Pointer (IP)-relative addressing.
medium | Tells the compiler to restrict code to the first 2GB; it places no memory restriction on data. Accesses of code can be done with IP-relative addressing, but accesses of data must be done with absolute addressing.
large | Places no memory restriction on code or data. All accesses of code and data must be done with absolute addressing.

## Default

-mcmodel=small | On systems using Intel® 64 architecture, the compiler restricts code and data to the first 2GB of address space. Instruction Pointer (IP)-relative addressing can be used to access code and data.

## Description

This option tells the compiler to use a specific memory model to generate code and store data. It can affect code size and performance. If your program has global and static data with a total size smaller than 2GB, -mcmodel=small is sufficient. Global and static data larger than 2GB requires-mcmodel=medium or -mcmodel=large. Allocation of memory larger than 2GB can be done with any setting of -mcmodel.

IP-relative addressing requires only 32 bits, whereas absolute addressing requires 64-bits. IP-relative addressing is somewhat faster. So, the small memory model has the least impact on performance.

### Note

When you specify option -mcmodel=medium or -mcmodel=large, it sets option -shared-intel. This ensures that the correct dynamic versions of the Intel run-time libraries are used.

If you specify option -static-intel while -mcmodel=medium or -mcmodel=large is set, an error will be displayed.

## IDE Equivalent

None

## Alternate Options

None

## Example

The following example shows how to compile using -mcmodel:

    icl -shared-intel -mcmodel=medium -o prog prog.c

Parent topic: Data Options

## See Also

shared-intel compiler option
fpic compiler option