Andrii
Нет, это будет числи, длина как ты говоришт или размер.
ioannes
Переходи на уровень самобразования выше - задрачивай себя сам по питону!
Ну это да но как-то в вакууме сам учишься не понимаешь что происходит вокруг
Agent_RBY_
Нет, мы не отправляем. Итак sizeof(a), sizeof(int) что вернут?
sizeof(a) вернёт 6? Я не Сишник просто, на абум тыкнул
Andrii
И вопрос: какой размер у a? Какой размер у int?
ioannes
Кринге
Agent_RBY_
так, а siseOf в байтах или битах возвращает?
Agent_RBY_
В байтах
ага, пон
Agent_RBY_
я тогда неправильно сказал, попутал int и long
Максимус
Насть, иди учи С с нуля, ты слишком далеко лезешь.
Andrii
Каждая переменная имеет размер. Который измеряется в байтах. Так вот, сейчас практически везде рамез int равен четыре байта. Поэтому размер переменной a будет 4 байта,
ioannes
Орево
Andrii
я тогда неправильно сказал, попутал int и long
Ну... с long история запутанная, там компилятор, сколько бит... long long тип почти везде 8
Agent_RBY_
Или это не в СИ...
Максимус
так, wait, int это же 2 байта, нет?
Зависит от архитектуры проца там может быть как 2, так и 4
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?
Максимус
Для тебе все в этом мире тайна. Не знаю зачем ты пошла в айти.
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
Agent_RBY_
у тебя ангельское терпение. Святой в чате!
Сразу после изучения Ангельского языка появляется
Andrii
Когда программа только запустилась, но не начала выполнятся, то в переменных мусор. Будет что-то вроде 1000 +---+---+---+---+---+---+---+---+---+---+-- | ? | ? | ? | ? | ? | ? | ? | ? | +---+---+---+---+---+---+---+---+---+---+--
Agent_RBY_
Стоит объяснить, что значение переменной не совсем напрямую влияет на размер ячеек. Скорее, на это влияет тип переменной, в данном случае, int
Максимус
Нет, оно так не работает. Любой инт занимает 4 ячейки.
Andrii
Ну... переменные a и b одного типа, они должны занимать одинаково места.
Agent_RBY_
Это не влияет
Максимус
Ну вот возьми запиши 1 и 2 в разные клетки в листке. Разве одна из цифр занимает больше места?
Максимус
Как одинаковое? Два больше одного в два раза.
Максимус
А, ты про это. Ну вот в памяти точно так же
Agent_RBY_
Да
Максимус
1004
Andrii
Уже близко
Agent_RBY_
1004
1005
Agent_RBY_
а, 1004, я математик, не важно
Максимус
1005
Переменная А начинается в 1000 и занимает 1001,1002,1003, следующая будет уже в 1004
Максимус
Господи, какой-то детский сад
Максимус
Тебе ровно ничего. Если ты не понимаешь зачем нам знать как устроена память и для чего это надо знать, то лучше иди в фронт. Будешь там кнопочки рисовать и т.д.
Максимус
А лабы покупай либо проси чтобы сделали.
Andrii
Что такое указатели
Максимус
У меня одногрупник ни одной лабы не сделал и ни копейки не потратил. В итоге сдал все лабы. Надо просто уметь вертеться.
Andrii
Как только программа запустилась, но не выполнилась, то в памяти находится мусор 1000 +---+---+---+---+---+---+---+---+---+---+-- | ? | ? | ? | ? | ? | ? | ? | ? | +---+---+---+---+---+---+---+---+---+---+--
Максимус
Andrii
Да. Т. е. там находятся какие-то числа, но какие на не ведомо
Andrii
Они могут быть любыми, они могут меняться отщапуска к запуску, ...
Agent_RBY_
Либо он очень хорошо умеет просить
Andrii
Далее, команда a = 10; что она делает? Она идёт по адресу переменной a (мы условились что это 1000), и в четыре байта 1000-1003 записывает число 10, и всё выглдяить так 1000 +---+---+---+---+---+---+---+---+---+---+-- | 10 | ? | ? | ? | ? | +---+---+---+---+---+---+---+---+---+---+--
ioannes
А можно мне так же ооп объяснять
Agent_RBY_
А можно мне так же ооп объяснять
Если будешь каждый день писать, что у тебя не получается ООП на протяжении двух недель, то да
Andrii
Ну... такова жизнь, что в Си в переменных вначале хранится мусор.
Andrii
А можно мне так же ооп объяснять
Не люблю ООП :) Могу аглебраическую теорию типов
ioannes
Или по солид пройтись
Максимус
А можно мне так же ооп объяснять
ООП вроде на практике надо учить.
Andrii
А как будет выгоядеть память, после выполнения b = 20;?
Сидредин
Орево
Сложный путь - это лёгкий путь. Всё ясно)
Andrii
Чистка мусора (уборка) это дополнительное время. А Си писался для того, чтобы экономить где только можено.
Andrii
Поэтому всякий C# проинициализирует переменную и запишет туда 0. А в Си тебе надо записать нуль явно