powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Хранение данных внутри блока кода
4 сообщений из 4, страница 1 из 1
Хранение данных внутри блока кода
    #39982808
IlyamI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда-то давным давно.... баловался я ASM.

Там можно было сделать примерно такую штуку (немного синтаксис забылся, но суть должна быть понятна):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
...
jmp @F
    label1: 'some text',0
    label2: some_structure
@F:
что-то делаем
mov eax, ptr label1
...
mov ebx, ptr label2
...


Делалось такое, чтобы не создавать глобальные переменные для единожды используемых констант (обычно текстовых).

Если я правильно понимаю, нижеследующий код создает локальные переменные (на стеке ?)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void myMessage()
{

    char message[]="Сообщение";
    char caption[]="Заголовок";
    
    MessageBoxA(0, (LPCSTR)message, (LPCSTR)caption, MB_OK);

}


а можно как-нибудь реализовать хранение этих "переменных" вот прям в блоке кода перед вызовом функции?
об атрибутах страниц памяти я осведомлен.

Готов к выслушиванию осуждений, возмущений, недоумений и тому подобного, но лучше по существу
...
Рейтинг: 0 / 0
Хранение данных внутри блока кода
    #39982809
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Смысла заморачиваться где хранится, лично я не вижу.
2. Хранить можно, однозначно.
3. Константы все таки static и никакие "локальные переменные" для них не нужны. А в примере Вашего кода даже и НЕ константы (нет const)

но лучше по существу
Сам не делал, но IMHO:
1. Сегмент данных или сегмент кода определяется при линковке. Т.ч. можно смотреть в опции компилятора/линковшика, каким образом правильно обозвать сегменты, что бы они линковались в сегмент кода
2. Есть __asm и прочее. Т.ч. забить данные в HEX виде в теле программы думаю вполне реально
...
Рейтинг: 0 / 0
Хранение данных внутри блока кода
    #39982811
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IlyamIа можно как-нибудь реализовать хранение этих "переменных" вот прям в блоке кода перед
вызовом функции?

Код: sql
1.
2.
     const char *message="Сообщение";
     const char *caption="Заголовок";


static по вкусу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Хранение данных внутри блока кода
    #39982840
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IlyamI

Если я правильно понимаю, нижеследующий код создает локальные переменные (на стеке ?)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void myMessage()
{

    char message[]="Сообщение";
    char caption[]="Заголовок";
    
    MessageBoxA(0, (LPCSTR)message, (LPCSTR)caption, MB_OK);

}



Сами строки (байты) скорее всего хранятся в статической области памяти — по сути не именованная глобальная переменная. При заходе в эту функцию, да, создаются локальные переменные на стеке — не константные массивы. И в них копируются данные из статической области памяти. Далее ты эти массивы можешь менять. Потом указатели на эти массивы передаются в функцию `MessageBoxA()`.

Но если ты эти массивы (на стеке) не меняешь, то оптимизатор наверное может передать в MessageBoxA() указатели на статическую область памяти. Т.е. не будет никаких локальных массивов и копирования.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Хранение данных внутри блока кода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]