инициализация const с переполнением стека

В чем разница с точки зрения следующего:

#include <iostream>

using namespace std;

int get_value(int value){
return 3 * value;
}int main(int argc, const char * argv[])
{

const int a = 5;
const int b = get_value(4);return 0;
}

Единственное отличие состоит в том, что const int a хранится в разделе bss, а const int b — нет, и оба все еще применяются в терминах компилятором.

Таким образом, поскольку в хранится в BSS это быстрее? Так как const в a вычисляется во время компиляции, это вариант использования constexpr? будет constexpr сделать const в b хранится в разделе bss?

блэр

1

Решение

Поскольку вы включили в свой вопрос тег constexpr, я предполагаю, что вы можете использовать constexpr в C ++ 11, чтобы вы могли изменить свою функцию на constexpr int get_value(constexpr int value); а затем использовать функцию как constexpr int b = get_value(4);, Это гарантирует, что вычисление будет выполнено во время компиляции, и b может быть оптимизирован компилятором как константа препроцессора. Однако, если где-либо в вашей программе, вы получите указатель на b (например, int* p = &b), b не оптимизирован и поэтому хранится в памяти во время выполнения.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]