Andrii
Нет, это будет числи, длина как ты говоришт или размер.
Agent_RBY_
Andrii
И вопрос: какой размер у a? Какой размер у int?
ioannes
Кринге
ioannes
Agent_RBY_
так, а siseOf в байтах или битах возвращает?
Максимус
Andrii
Agent_RBY_
Agent_RBY_
я тогда неправильно сказал, попутал int и long
Максимус
Насть, иди учи С с нуля, ты слишком далеко лезешь.
Andrii
Каждая переменная имеет размер. Который измеряется в байтах. Так вот, сейчас практически везде рамез int равен четыре байта. Поэтому размер переменной a будет 4 байта,
ioannes
Agent_RBY_
Agent_RBY_
Или это не в СИ...
Andrii
Agent_RBY_
В DOS да
По моему, в Паскале ещё
Andrii
Хорошо, пусть sizeof(int) == 4 Работая с указателями нам надо понимать, что каждая переменная имеет свой размер
Agent_RBY_
Ну представь, что твой код выполняется минуту, а мой секунду, хотя делают они одно и то же. Чей код лучше?
Agent_RBY_
так для этого и нужно знать про эти ваши байты
Andrii
Адрес это просто число, по которому располагается переменная. Допустим, что адрес переменной a равен 1000, размер переменной a мы выяснили, это 4. Чему равен адрес переменной b?
int main()
{
int a = 10;
int b = 20;
return a + b;
}
Максимус
Ну так чтобы оптимизировать надо знать про использование памяти
Andrii
Почему?
Agent_RBY_
М - математика
Максимус
Ну впринципе логично, но не правильно
Andrii
Нет, значение не имеет никакого отношения к адресу
Agent_RBY_
Ну смотри, задачка, 2 класс, у нас есть переменная а которая на 1000 ячейке, и занимает она 4 ячейки, после неё идёт переменная b, на какой ячейке переменная b?
ioannes
Максимус
Для тебе все в этом мире тайна. Не знаю зачем ты пошла в айти.
Agent_RBY_
Ладно
Пашок🗽
Насте нужно отдохнуть
Максимус
Тебе получилось в универ поступить который имеет совсем другую специализацию.
Agent_RBY_
1000 это условное значение взятое из воздуха, и нет, не 1000
Andrii
Не совсем. Переменные обычно располагаются одна за другой.
1000
+---+---+---+---+---+---+---+---+---+---+--
| a | b |
+---+---+---+---+---+---+---+---+---+---+--
Максимус
Ну так нарисуй 16 илр 32 ячейки, каждая переменная типа инт занимает 4 ячейки. Теперь думай как они там размещаются.
Agent_RBY_
Ладно, поясню ещё раз.
Есть у нас переменная a, которая начинается на 1000 ячейке и занимает 4 байта. В итоге, переменная a будет сидеть на 1000-1004 ячейках. Сразу после неё идёт переменная b, которая тоже содержит 4 байта, а значит с 1005 по 1008 ячейки будет занимать переменная b
Шаман Каган
Andrii
Когда программа только запустилась, но не начала выполнятся, то в переменных мусор. Будет что-то вроде
1000
+---+---+---+---+---+---+---+---+---+---+--
| ? | ? | ? | ? | ? | ? | ? | ? |
+---+---+---+---+---+---+---+---+---+---+--
Agent_RBY_
Стоит объяснить, что значение переменной не совсем напрямую влияет на размер ячеек. Скорее, на это влияет тип переменной, в данном случае, int
Максимус
Нет, оно так не работает. Любой инт занимает 4 ячейки.
Andrii
Ну... переменные a и b одного типа, они должны занимать одинаково места.
Agent_RBY_
Это не влияет
Максимус
Ну вот возьми запиши 1 и 2 в разные клетки в листке. Разве одна из цифр занимает больше места?
Максимус
Как одинаковое? Два больше одного в два раза.
Максимус
А, ты про это. Ну вот в памяти точно так же
Agent_RBY_
Да
Максимус
1004
Andrii
Уже близко
Agent_RBY_
Agent_RBY_
а, 1004, я математик, не важно
Максимус
1005
Переменная А начинается в 1000 и занимает 1001,1002,1003, следующая будет уже в 1004
Максимус
Господи, какой-то детский сад
Agent_RBY_
Максимус
Тебе ровно ничего. Если ты не понимаешь зачем нам знать как устроена память и для чего это надо знать, то лучше иди в фронт. Будешь там кнопочки рисовать и т.д.
Максимус
А лабы покупай либо проси чтобы сделали.
Andrii
Что такое указатели
Максимус
У меня одногрупник ни одной лабы не сделал и ни копейки не потратил. В итоге сдал все лабы. Надо просто уметь вертеться.
Andrii
Как только программа запустилась, но не выполнилась, то в памяти находится мусор
1000
+---+---+---+---+---+---+---+---+---+---+--
| ? | ? | ? | ? | ? | ? | ? | ? |
+---+---+---+---+---+---+---+---+---+---+--
Максимус
Andrii
Да. Т. е. там находятся какие-то числа, но какие на не ведомо
Andrii
Они могут быть любыми, они могут меняться отщапуска к запуску, ...
Agent_RBY_
Либо он очень хорошо умеет просить
Andrii
Далее, команда a = 10; что она делает? Она идёт по адресу переменной a (мы условились что это 1000), и в четыре байта 1000-1003 записывает число 10, и всё выглдяить так
1000
+---+---+---+---+---+---+---+---+---+---+--
| 10 | ? | ? | ? | ? |
+---+---+---+---+---+---+---+---+---+---+--
ioannes
А можно мне так же ооп объяснять
Andrii
Ну... такова жизнь, что в Си в переменных вначале хранится мусор.
ioannes
Или по солид пройтись
Andrii
А как будет выгоядеть память, после выполнения b = 20;?
Сидредин
Сложный путь - это лёгкий путь. Всё ясно)
Andrii
Чистка мусора (уборка) это дополнительное время. А Си писался для того, чтобы экономить где только можено.
Сидредин
Andrii
Поэтому всякий C# проинициализирует переменную и запишет туда 0. А в Си тебе надо записать нуль явно