Имена указателя C++

https://aframe.io/docs/0.8.0/components/material.html#transparency-issues

Благодаря непрозрачности A-Frame устанавливает для средства визуализации three.js значение sortObjects: false. Порядок прозрачности основан на том, когда объекты добавляются / определяются в сцене. Перемешайте порядок текста, например, HTML, или когда они вводятся, и это должно сработать.

5
задан Nathan Fellman 1 June 2009 в 11:00
поделиться

8 ответов

Длина имени переменной не влияет на размер вашей программы, а только на время, необходимое для ее написания.

23
ответ дан 18 December 2019 в 05:13
поделиться

Имя локальных переменных нужно только компилятору, чтобы найти переменные, к которым вы хотите обратиться. После компиляции эти имена обычно стираются и полностью заменяются числовыми символами или эквивалентами. Это происходит для всех имен, которые практически не связаны (конечно, если вы выполняете отладочную сборку, все может быть иначе). То же самое и с параметрами функции.

Имя глобальных переменных, например, нельзя стереть, потому что вы можете использовать его из другого модуля в своей программе, и компоновщик должен иметь возможность найти его. Но после того, как ваша программа была связана, даже их названия можно стереть.

И в конце концов, они не занимают оперативную память. Эти имена хранятся в таблице перераспределения с целью связывания (см. strip программу, как удалить эти имена).

Но в любом случае, мы говорим о нескольких байтах, которые уже потрачены впустую на выравнивание и так далее. Сравните это с чертовски длинными именами экземпляров шаблонов. Попробуйте это:

readelf -sW /usr/lib/libboost_*-mt.so  | awk '{ print length($0), $0 }' | sort -n
14
ответ дан 18 December 2019 в 05:13
поделиться

Имена указателей не сохраняются. Имя указателя (или любое имя переменной, если на то пошло) не компилируются в окончательный двоичный файл (при условии, что вы не компилируете символы, включенные).

Указатели - это просто целые числа (или длинные числа), которые хранятся в памяти, которая , в свою очередь, укажите на элемент, на который они указывают, в каком-либо месте памяти.

9
ответ дан 18 December 2019 в 05:13
поделиться

Microsoft использует префикс «p» для обозначения указателя:

int intOne = 0;
int* pIntOne = &intOne;

На самом деле они используют венгерский для всего.

Это работает довольно хорошо, если вы привыкнете к видя это. Многие сначала думают, что это некрасиво.

Что бы вы ни решили, я считаю полезным указать, что что-то является типом указателя в своем имени, хотя я бы не стал заходить так далеко в вашем примере. :)

4
ответ дан 18 December 2019 в 05:13
поделиться

Я согласен с предыдущими сообщениями, но я хотел бы указать кое-что вокруг этого. Иногда люди злоупотребляют указателями, думая, что их использование автоматически приведет к небольшому объему памяти. Это не всегда так. Рассмотрим этот фрагмент кода:

void myfunc(const char *var) {
    // Function body
}

Указатель на char будет занимать 4 байта в 32-битной архитектуре, тогда как сам char обычно занимает 1 байт. (Здесь предполагается, что var указывает на один байт, а не на строку.) Вы понимаете суть? С другой стороны, вы всегда должны использовать указатели (или ссылки) для сложных объектов:

void myfunc(const string &str) {
    // Function body
}

Конечно, если вы хотите изменить переменную внутри своей функции, вы должны удалить ключевое слово const .

]
2
ответ дан 18 December 2019 в 05:13
поделиться

Указатели колодцев чаще всего используются для объектов, которые распределяются динамически, и / или для функций.

В случае динамического выделения вы можете просто поставить перед ним ptr, если вы настаиваете на использовании этой нотации. В случае с функциями веселье тоже работает.

0
ответ дан 18 December 2019 в 05:13
поделиться

Я не вижу причин, по которым этому должно что-либо предшествовать. Ваш компилятор / редактор сделает всю работу за вас.

1
ответ дан 18 December 2019 в 05:13
поделиться

Здесь есть два критических момента, которые я хотел бы попытаться выделить:

  1. Длина имени переменной не влияет на пространство, выделенное для данных в окончательно скомпилированной программе на C / C ++, поскольку компилятор придумывает свои собственные имена для переменных.
    • NB. Некоторые компиляторы, особенно старые, могут распознавать только первые несколько букв имени переменной, поэтому наличие очень длинных и слишком сложных имен переменных в исходном коде может привести к конфликтам.
    • Кроме того, если вы создаете файлы символов для отладки, они будут содержать все ваши имена переменных, поэтому станут чрезмерно большими, но это не может существенно замедлить отладку, я никогда не проверял!
  2. Пространство, необходимое для хранения указателя, действительно может быть больше, чем пространство, необходимое для данных, на которые указывают, но все же существуют обстоятельства, при которых вы можете захотеть их использовать в любом случае. Например, в такой архитектуре, как COM, где практика такова, что функции возвращают только код результата (успех или неудача), а все данные, которые изменяются, выполняются через указатели, переданные в стек:
    / *
     pszString может указывать только на один символ, который
     меньше места, чем указатель
    * /
    HRESULT OneLetterSplat (char * pszString)
    {
     * pszString = 'а';
     вернуть УСПЕХ
    }
    
0
ответ дан 18 December 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: