2016-11-08 2 views
2

Я просматривал исходный код Clang/LLVM, и я наткнулся на CodeModel свойство CodeGenOptions.Что касается CodeModel в Clang/LLVM?

основе this method, действительные значения кажутся: "small", "kernel", "medium" и "large".

Что это за контроль?

Как мне выбрать правильное значение для моего приложения?

ответ

4

Код модели - термин от AMD64 ABI (см. 3.5.1 от https://software.intel.com/sites/default/files/article/402129/mpx-linux64-abi.pdf для получения дополнительной информации).

Вкратце - большинство смещений внутри инструкций x64-64 относятся к ПК, однако непосредственное поле внутри инструкций составляет всего 32 бита. Поэтому, если данные расположены «далеко» от кода (более чем на 32-битных друг от друга), тогда невозможно было бы использовать непосредственное поле внутри инструкций для эффективного кодирования смещения и должно явно вычислять адрес. Модель кода предоставляет различные ограничения на относительное расположение кода и данных.

Если вы собираете все статически, то «маленький» является безопасным (и по умолчанию). Если вы JIT'ing, тогда все возможно, особенно если ASLR включен, и вам нужно использовать модель среднего/большого кода.

Смежные вопросы