Comments 26
Да автор вообще что-то странное написал, я вот в последний абзац вообще не понял, что значит вопрос "где хранятся ссылки на адреса ячеек памяти?" Похоже автор что-то нахватал по верхам, но до конца не понял, и теперь у него в голове смешались в кучу имена переменных, адреса и ссылки.
Вот и настало то время, когда компилируемый язык без сборки мусора, это хаб "ненормальное программирование"
Все структуры объявлены по два раза, память под барьеры почему не переиспользуется, а выделяется всегда больше. Все структуры всегда аллцируются на куче — не надо так. Про поток сознания из последнего абзаца вообще сказать нечего
Сохранить в памяти одномерный массив можно записав определенное количество данных в последовательные ячейки памяти, а дальше приходится прыгать с бубном, т.к. методов для работы с ним нет.
Для перебора ряда данных (одномерный массив) берется адрес первого элемента, а затем в цикле (с шагом = размер типа данных) осуществляется переход на следующий адрес.
int n = 10;
int step = sizeof(Barrier);
Barrier* barrier = malloc(step * n);
for (int i = 0; i < n; i += step) {
*(barrier + i) = data;
}
Простите, что?!
Во-первых, в арифметике указателей уже учитывается размер типа данных, например, прибавление 1 к указателю типа int*
прибавит sizeof(int)
.
Во-вторых,
for (int i = 0; i < n; i++) {
barrier[i] = data;
}
i[barrier] = data, тоже подойдет… Поэтому, в принципе, у автора там верно.
а может поэтому это ненормальное программирование?
может это такой юмор?
Я не хотел говорить об арифметике указателей, мне хотелось рассказать про то, как это как это работает внутри.
Спасибо за комментарии)
По-моему, вы мало что узнали, но запутались окончательно. Например, в Си вообще нет ссылок, только указатели. Лучше, все таки вначале, что то почитать.
Компьютер не знает что такое массивы
Хабру точно нужны такие детсадовские статьи?
Автор начните с учебника по С
За С обидно.
Отхватил люлей и за то что сам мусор не удаляет и массивы у него размер не меняют.
В свое время я его в школе учил, наверное, не плохо бы это в принудительном порядке делать, чтобы люди с низким уровнем знакомились
В ассемблере любая переменная хранит как ссылку на ячейку памяти, так и значение, которое в ней хранится.
Переменная может и в регистре храниться.
А теперь не знают ничего ни про регистры, ни про устройство памяти, ни что такое реальный\защищенный режим. Начинают сразу с джаваскрипта, а С\С++ — это уже «сложно-непонятно» и позорятся незнанием.
Были ли полезны эти знания в работе непосредственно — нет. Помогло ли в обучении реально используемым вещам — очень даже.
Написать шейдер для unity 3d — без проблем. Навалять скриптик на python — легко. Распределенная приложуха на aws — дайте документацию, будет готово к вечеру. Написать прототип на embedded проект — вообще не напрягаясь.
Такая солянка в универе напрочь отбила любой страх обучению новому и дала гибкость. Даже банальная «чуйка» выработалась — базовые вещи уже на уровне инстинктов отложились, и часто пробелы в конкретных вещах компенсируются умением быстро докопаться к истине.
За 7 лет работы в на самых разнообразных проектах не возникало трудностей от слова совсем, и не потому что я знаю все на свете, а потому что научили учится.
потом С, потом С++, и только потом всякие джавы.
Не троллинга ради, а интересных мыслей получения для: какой сакральный смысл в этой цепочки у С++? Да, на нем много всякого прикладного понаписано, но ведь при необходимости к нему вполне можно будет вернуться без потерь, нарушив озвученный порядок. Он ведь не даст каких-то сакральных знаний в сравлении с той же Java, это будет еще одна имплементация того же ООП.
Хотя, что ожидать от человека (меня), который начал с ZX бейсика и ассемблера, а в «настоящие компьютеры» вошел с изучением Perl, Java и PHP (да-да, все версии 4ые)…
А я узнал, что существительное "длина" может писаться как с одной, так и с двумя "н". По-видимому в зависимости от того, насколько длинна эта длина. Интересно, если ли версия с тремя "н"?
Что нового я узнал о компьютере, когда решил написать Chrome Dino на C