Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167

Где хранятся аргументы, передаваемые в функцию

20.04.2012, 19:59. Показов 5118. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
собственно - сабж...
интересует вопрос, где же (в какой памяти) всё таки хранятся аргументы, которые передаются в функцию? и где можно почитать про всякие указатели на функцию, указатели на метод класса и т.д. в общем так называемые "АЗЫ"?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.04.2012, 19:59
Ответы с готовыми решениями:

Аргументы, передаваемые в main
Всем доброго утра. Вот такой вопрос возник. Запуская программу в консоли имеем вид >cpp1.exe -b -s -f=10 test.txt text_output.rez...

Получить аргументы, передаваемые в приложение, запускаемое по ярлыку
Хай товарищи! У кого есть пример кода реализации события с ярлыка? Что бы при клике по ярлыку в программе событие происходило.

А как передавать аргументы и где их определять в функцию main() ?
До сих пор, функция main() была без параметров, а тут пример: int main(int argc, char*argv) {} Без каких-либо подробных...

18
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
20.04.2012, 20:08
Цитата Сообщение от l_a_m Посмотреть сообщение
где же (в какой памяти) всё таки хранятся аргументы, которые передаются в функцию?
стек/регистры
Цитата Сообщение от l_a_m Посмотреть сообщение
и где можно почитать про всякие указатели на функцию, указатели на метод класса
да хоть у нас на форуме - непонятная конструкция, шаблоны
ну и
Литература C++
2
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.04.2012, 20:10
l_a_m, там, где это предусмотрено соглашением о вызовах. Обычно стек, регистры, или стек + регистры.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.04.2012, 20:13
Цитата Сообщение от l_a_m Посмотреть сообщение
где же (в какой памяти) всё таки хранятся аргументы, которые передаются в функцию?
Либо в стеке, либо на регистрах, либо и там и там. Всё зависит от программных соглашений. На каждой архитектуре это сделано по разному

Реализация __stdcall, __cdecl
1
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
20.04.2012, 20:19  [ТС]
благодарю, нутром чуял что в стеке, но с ходу у гугла не смог этого выяснить...

Добавлено через 1 минуту
ну и ещё интересует, организация стековой памяти и организация кучи, сегодня меня с лёгкостью загнали в тупик академическими задачками )
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.04.2012, 20:20
Цитата Сообщение от l_a_m Посмотреть сообщение
ну и ещё интересует, организация стековой памяти и организация кучи
Это лучше в книгах читай. Там сложного ничего нет, но объяснять долго
1
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
20.04.2012, 20:24  [ТС]
да мне это когда-то в институте читали, и сам в книжках читал, но уже нефига не помню ) сейчас погуглю на тему Страуструпа, там думаю точно есть такие мелочи...
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
20.04.2012, 20:45
Цитата Сообщение от l_a_m Посмотреть сообщение
ну и ещё интересует, организация стековой памяти и организация кучи, сегодня меня с лёгкостью загнали в тупик академическими задачками
Ну, стек - это стопка тетрадей, причем работать (читать-писать) можно только с верхней. Вызвал функцию - новая тетрадка сверху, вышел - тетрадка сжигается.
Куча - сказал new (или malloc) - тебе выделяется память и дается ее адрес (указатель). Эта память никем использоваться не может, пока ты ее не освободил delete (или free). Организация кучи на порядок посложнее организации стека. Нужно еще учет свободной памяти вести, а она кусочная получается. Простейшую кучу можно сделать так. В свободной памяти выделяется кусок длины N+4
Первые 4 байта - длина куска, затем N байтов памяти. При освобождении все эти N+4 байта возвращаются в список свободных кусков. Вот организация этого списка и есть самое интересное в реализации кучи.
Ну, все это так, на пальцах, на самом деле алгоритмы ведения кучи могут быть совершенно разные
Цитата Сообщение от Evg Посмотреть сообщение
Это лучше в книгах читай.
1
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
20.04.2012, 22:05  [ТС]
Цитата Сообщение от Байт Посмотреть сообщение
Ну, стек - это стопка тетрадей, причем работать (читать-писать) можно только с верхней. Вызвал функцию - новая тетрадка сверху, вышел - тетрадка сжигается.
Куча - сказал new (или malloc) - тебе выделяется память и дается ее адрес (указатель). Эта память никем использоваться не может, пока ты ее не освободил delete (или free).
благодарю, я как бе знаю что это такое, но не знаю принципов, точнее не так... реализации работы памяти\регистров, собственно это и хочу для себя подчерпнуть, скорее это наверное больше вопрос не с точки зрения программирования, а с точки зрения комп. схемотехники или комп. арифметики или ещё хз чего )
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
20.04.2012, 22:13
Ну операционка тебе всё равно не даст к реальной памяти доступа.программа работает в какой-то своей области ОЗУ. Ты можешь параллельно запустить вторую такую же программу, если под Windows например, Вторая программа запустится, начнёт записывать точно такие же переменные в стек и кучу,
причём по тем же самым адресам.
но окажутся они в двух разных областях реальной памяти, предоставленным Осью.
но со схемотехникой это никак не будет связано.
Всю память предоставляет операционка.
...вроде бы
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
20.04.2012, 22:36
Цитата Сообщение от l_a_m Посмотреть сообщение
благодарю, я как бе знаю что это такое,
Прошу прощения, если мой пост оказался для вас общим местом. Ну вот, был вопрос, вызвал пару ассоциаций, я не стал себе отказывать в удовольствии их изложить. Я же не знаю вашего уровня. Надеюсь, что никто не обижен
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
20.04.2012, 23:02  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
но со схемотехникой это никак не будет связано.
Всю память предоставляет операционка.
да ну разве? операционка естественно принимает участие в распределении памяти, но ИМХО можно и запросить непосредственно конкретную область в памяти и тебе ОС должна таки будет выделить именно ту область памяти, которую ты запрашиваешь... физическая адресация то всё равно одна и та же, не смотря на ОС, тут уже больше архитектура важна ИМХО.

Добавлено через 1 минуту
Цитата Сообщение от Байт Посмотреть сообщение
Прошу прощения, если мой пост оказался для вас общим местом. Ну вот, был вопрос, вызвал пару ассоциаций, я не стал себе отказывать в удовольствии их изложить. Я же не знаю вашего уровня. Надеюсь, что никто не обижен
да всё нормально, сам частенько люблю по глумиться над не очень адекватными вопросами
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
20.04.2012, 23:21
Цитата Сообщение от l_a_m Посмотреть сообщение
да ну разве? операционка естественно принимает участие в распределении памяти, но ИМХО можно и запросить непосредственно конкретную область в памяти и тебе ОС должна таки будет выделить именно ту область памяти, которую ты запрашиваешь... физическая адресация то всё равно одна и та же, не смотря на ОС, тут уже больше архитектура важна ИМХО.
Ну и как ты в Windows, скажем запросишь обнулить первый мегабайт в оперативке?? Или обнулишь память соседнего процесса или системных процессов операционки???
Ну напиши мне такую программку на Си.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.04.2012, 23:29
Вы не сможете выделить "нужную" Вам память в ОС. ОС выделяет каждому приложению свое уникальное адресное пространство, которое для 32-битных приложений составляет максимум 4 гб и естественно имеет виртуальный диапазон для приложения от 0x00000000 до 0xFFFFFFFF.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
20.04.2012, 23:33
Цитата Сообщение от l_a_m Посмотреть сообщение
да ну разве? операционка естественно принимает участие в распределении памяти, но ИМХО можно и запросить непосредственно конкретную область в памяти и тебе ОС должна таки будет выделить именно ту область памяти, которую ты запрашиваешь... физическая адресация то всё равно одна и та же, не смотря на ОС, тут уже больше архитектура важна ИМХО.
программы давным давно уже работают с виртуальной памятью
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
20.04.2012, 23:36
Цитата Сообщение от Toshkarik Посмотреть сообщение
Вы не сможете выделить "нужную" Вам память в ОС. ОС выделяет каждому приложению свое уникальное адресное пространство, которое для 32-битных приложений составляет максимум 4 гб и естественно имеет виртуальный диапазон для приложения от 0x00000000 до 0xFFFFFFFF.
Именно, можно параллельно запустить две совершенно одинаковые программы, попросить их вывести адреса своих переменных, и они выведут одинаковые числа хотя выполняются программы независимо друг от друга.
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
20.04.2012, 23:42  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
непонятная конструкция, шаблоны
благодарю... хороший рассказ, я не знал, что в методы класса не явно передается указатель this, я если честно думал, что он какой-то magic и берётся из потолка)))

Добавлено через 1 минуту
эм... т.е. ассемблер к примеру не спасёт отца советской демократии О_о?
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ну и как ты в Windows, скажем запросишь обнулить первый мегабайт в оперативке?? Или обнулишь память соседнего процесса или системных процессов операционки???
Добавлено через 2 минуты
Цитата Сообщение от alex_x_x Посмотреть сообщение
программы давным давно уже работают с виртуальной памятью
в принципе я знал это, но искренне до сиго момента тешил себя мыслью, что программист всё же может получить область в памяти, как же тогда работают всякого рода эксплойты и т.п. дыры в коде? О_о
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.04.2012, 23:43
Цитата Сообщение от l_a_m Посмотреть сообщение
что в методы класса не явно передается указатель this
После компиляции VS2008 падает после удаления узла дерева, имеющего потомка
После компиляции VS2008 падает после удаления узла дерева, имеющего потомка
1
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
20.04.2012, 23:55  [ТС]
мдя... чувствую пора искать книгу дракона и вперёд, к недосягаемым разуму вершинам бытия))))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2012, 23:55
Помогаю со студенческими работами здесь

Создайте перегруженную функцию inc (), которая к аргументу прибавляет 1, где аргументы целый (int),
С помощью перегруженных функций (без классов). //2.С помощью перегруженных конструкторов или методов класса //3.С помощью обобщенных...

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

Указатели на передаваемые двумерные массивы в функцию
Доброго времени суток) Вчера озадачился новым. В недавнем времени перешел на vs 2013 и тут при написании ф-ии решил передать в нее массив...

Что означают цифры в передаваемые в функцию?
g.DrawLine(aPen, Point2D(new PointF(3, 2)), Point2D(new PointF(6, 7))); private PointF Point2D(PointF ptf) { ...

Конверсия указателя из double в int, пропускает передаваемые переменные в функцию
Здрасти, такая проблема код : #include <iostream> #include <sstream> #include <cstring> using namespace std; void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru