Как я понял, следующий код генерирует массивы переменной длины (через нестандартное расширение C++).Есть ли способ проверить, созданы ли массивы переменной длины в стеке/куче?
int main()
{
int valone = rand();
int valtwo = rand();
int array[valone][valtwo];
// Printing size
cout << sizeof(array) << endl;
}
Есть ли способ проверить, сгенерирован ли его на стек или кучу? Описание wikipedia here говорит, что gcc
генерирует то же самое в стеке, но когда я пытался использовать код выше, размер массива кажется слишком большим, чтобы вписаться в стек, но он никогда не жалуется.
Примечание: Этот код работает только с GCC & звоном, а не с визуальной студией
Ссылка на Википедию вы указываете на C99, а не на C++. 'gcc' может или не может обрабатывать код C99 и код C++. –
Не уверен насчет стандартного способа (так же как и «стандарт» применим для «нестандартного расширения»), но для быстрого тестирования вы можете сравнивать адреса 'valtwo' и' array [0] '. Если массив находится в стеке, они должны быть смежными. Если бы на куче, они были бы совсем другими. Это не на 100% надежнее, но будет работать большую часть времени. – Mikhail
Вероятно, он не будет жаловаться, пока вы не получите доступ к внешнему временному хранилищу, но кто знает наверняка? – user4581301