Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];

Вниз

строковые константы   Найти похожие ветки 

 
Gu   (2011-09-01 18:58) [0]

Приложение использует много строковых констант, которые юзаются во многих его модулях. Вопрос: как будет правильнее объявить их: в начале основного модуля (все другие его юзают) в разделе Consts или в разделе Resourcestring? Есть ли между ними большие отличия и влияет ли это на скорость работы и расход памяти при загрузке приложения и работе?


 
Ega23 ©   (2011-09-01 19:28) [1]


> в начале основного модуля


 
_Юрий   (2011-09-01 19:29) [2]


>  в разделе Consts или в разделе Resourcestring?


Отличие собственно в том, будут ли они константами или строками в ресурсе.
Отличия между ними разумеется большие.
Ресурсные строки обычно делаются в том случае, когда требуется локализация приложения.


 
Gu   (2011-09-01 20:06) [3]

Т.е. я так понимаю, что в слчае с Resourcestring прога при использовании их в процедурах будет каждый раз лазить в свои ресурсы (т.е. выполнять файловую операцию), а в случае с константами - все операции производятся в памяти?


 
Anatoly Podgoretsky ©   (2011-09-01 20:07) [4]

> Gu  (01.09.2011 18:58:00)  [0]

Resourcestring правильнее и оптимальнее, об этом заботится система.


 
Rouse_ ©   (2011-09-01 20:07) [5]

В обоих случаях операция производится в памяти


 
Anatoly Podgoretsky ©   (2011-09-01 20:20) [6]

> Rouse_  (01.09.2011 20:07:05)  [5]

Только в первом в памяти все, что сумеет подгрузить, а с ресурсами по
потребностями


 
Rouse_ ©   (2011-09-01 20:50) [7]


> Anatoly Podgoretsky ©   (01.09.11 20:20) [6]
> Только в первом в памяти все, что сумеет подгрузить, а с
> ресурсами по потребностями

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


 
Anatoly Podgoretsky ©   (2011-09-01 20:52) [8]

> Rouse_  (01.09.2011 20:50:07)  [7]

Грузится по 16 строк.


 
Rouse_ ©   (2011-09-01 21:00) [9]

Целиком грузится :) Если-б образ исполняемого файла не грузился в память целиком вместе со всеми секциями, включая секцию ресурсов, то было-бы не возможно такое понятие, как дамп образа.


 
Rouse_ ©   (2011-09-01 21:01) [10]

зы: скомпиляй вот эту демку, она наглядно все кажет, что где и каким образом: http://rouse.drkb.ru/winapi.php#pmm


 
Игорь Шевченко ©   (2011-09-01 22:48) [11]

Rouse_ ©   (01.09.11 21:00) [9]

100-мегабайтный инсталлятор тоже целиком в память грузится ?

вот у меня есть файл:

Turbo Dump  Version 6.3.0.0 Copyright (c) 1988-2009 Embarcadero Technologies, Inc.
        Display of File windowsxp.x86.fre.rtm.symbols.exe

Object table:
#   Name      VirtSize    RVA     PhysSize  Phys off  Flags  
--  --------  --------  --------  --------  --------  --------
01  .text     000085F2  00001000  00008600  00000400  60000020 [CER]
02  .data     00001BE4  0000A000  00000400  00008A00  C0000040 [IRW]
03  .rsrc     095D4000  0000C000  095D3E00  00008E00  40000040 [IR]

Все секции будут при запуске сразу на память отображены ?


 
Rouse_ ©   (2011-09-02 01:26) [12]

Инсталятор? А коим образом он к исполняемому файлу то относится? Загрузочный стаб и секция передаваемая MSI службе


 
Игорь Шевченко ©   (2011-09-02 09:49) [13]


> А коим образом он к исполняемому файлу то относится?


имеет PE-формат


 
Rouse_ ©   (2011-09-02 10:38) [14]


> Игорь Шевченко ©   (01.09.11 22:48) [11]

Кстати именно этот инсталятор таки да, грузится целиком...


 
Игорь Шевченко ©   (2011-09-02 10:38) [15]


> Кстати именно этот инсталятор таки да, грузится целиком.
> ..


prove it


 
Игорь Шевченко ©   (2011-09-02 10:40) [16]

Для начала неплохо бы договориться о терминологии: что значит "грузится" ?


 
Rouse_ ©   (2011-09-02 10:41) [17]


> Игорь Шевченко ©   (02.09.11 10:38) [15]
> prove it

http://rouse.drkb.ru/tmp/m.png


 
han_malign   (2011-09-02 10:53) [18]


> prove it

http://support.microsoft.com/default.aspx?scid=kb;en-us;193678


 
Игорь Шевченко ©   (2011-09-02 12:56) [19]

Это все хорошо, но где написано, что "грузятся" ? Хоть на одной картинке ?
Лежат себе на диске преспокойно, как и неиспользуемые страницы кодового сегмента.


 
Rouse_ ©   (2011-09-02 13:09) [20]


> Игорь Шевченко ©   (02.09.11 12:56) [19]
>
> Это все хорошо, но где написано, что "грузятся" ? Хоть на
> одной картинке ?
> Лежат себе на диске преспокойно, как и неиспользуемые страницы
> кодового сегмента.

Ну тут дело в том, что если снять дамп процесса и при этом запустить FileMon, то отчетливо будет видно, что зачитки данных с образа файла на диске не происходит.


 
Игорь Шевченко ©   (2011-09-02 13:15) [21]

Rouse_ ©   (02.09.11 13:09) [20]

А если запустить FileMon до запуска процесса ? Он покажет чтение ВСЕГО исполняемого файла ?


 
Rouse_ ©   (2011-09-02 13:17) [22]

Да, файл будет зачитан целиком


 
Slym ©   (2011-09-02 13:26) [23]

Rouse_ ©   (02.09.11 13:17) [22]
антивирь отключи чтоб не сканил предварительно


 
Rouse_ ©   (2011-09-02 13:32) [24]

Я на виртуалке тестировал, у меня файл символов там лежит с сайсом, там антивиря нет...


 
Игорь Шевченко ©   (2011-09-02 13:32) [25]

ради интереса запустил FileMon и указанный файл. Чтения всех 146 мегабайт не увидел. И не ожидал увидеть, так как в книжках, начиная с Рихтера, написано, что исполняемые файлы читаются по мере надобности, а не  целиком при запуске.


 
Rouse_ ©   (2011-09-02 13:33) [26]

А чтение при дампе увидел?


 
Rouse_ ©   (2011-09-02 13:34) [27]

Кстати, выгрузку всей ресурсной секции в временную папку тоже не увидел? Интересно тогда, как это она так без полного чтения то?


 
Игорь Шевченко ©   (2011-09-02 13:37) [28]


> А чтение при дампе увидел?


что такое дамп ?


 
Rouse_ ©   (2011-09-02 13:40) [29]

У максвела этот процесс описан вот так: http://www.netlib.narod.ru/library/book0010/ch08_07.htm


 
Игорь Шевченко ©   (2011-09-02 13:48) [30]


> У максвела этот процесс описан вот так


"Наиболее распространенным двоичным форматом Linux является ELF, поэтому рассмотрим, как двоичный обработчик ELF выполняет дамп памяти.
"

Как прикажешь тебя понимать ?

Я тебе могу сказать больше - если ты запустишь FileMon и выполнишь копирование файла, операции чтения всего этого файла тоже будут показаны. Ты обращаешься ко всем страницам памяти в адресном пространстве процесса, вызывая их отображение на физическую память.


 
Rouse_ ©   (2011-09-02 13:59) [31]


> Как прикажешь тебя понимать ?

Ссылка была дана как описание того, что есть дамп памяти.


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

Откуда они отображаются? Где хранятся не отображенные данные?

Я же тебе еще раз говорю, ты сказал что не увидел зачитки всего файла.
Ладно допустим. Но проблемка в том что при старте инсталятор символов выгружает во временную папку хранящиеся в секции ресурсов файлы eula.txt simbols.cab simbols.cat и т.д.
Вопрос, откуда он их взял, чтения файла то не было по твоему утверждению? Или может быть все-же идущая перед выгрузкой запись запись LoadImage с указанием размера нам намекает?


 
Игорь Шевченко ©   (2011-09-02 15:06) [32]


> Откуда они отображаются? Где хранятся не отображенные данные?


на диске.


> Вопрос, откуда он их взял,


Вот в момент обращения к этим данным и было чтение. Через диспетчер памяти.


 
Rouse_ ©   (2011-09-02 15:11) [33]


> в момент обращения к этим данным и было чтение

А FileMon его не показал... понятно.


 
Юрий Зотов ©   (2011-09-02 15:20) [34]

Если я правильно понял Рихтера, то ни один файл (включая исполнимые) ПОЛНОСТЬЮ в ОЗУ никогда не грузится. Он отображается на АП процесса, а в ОЗУ грузится постранично, по мере надобности (конечно, с учетом еще и кэша страниц). То есть, сам дисковый файл как бы используется в качестве некоего свопа.


 
Юрий Зотов ©   (2011-09-02 15:22) [35]

Разве что весь файл умещается в одной странице... тогда загрузится полностью, конечно.
:o)


 
Rouse_ ©   (2011-09-02 15:39) [36]

Да это все понятно, просто я то речь веду про виртуальную память, а не про физическую...


 
Inovet ©   (2011-09-02 15:41) [37]

> [34] Юрий Зотов ©   (02.09.11 15:20)
> файл как бы используется в качестве некоего свопа

Разве механизм не один и тот же что и в свопе. Просто файл и так уже на диске находится.


 
Inovet ©   (2011-09-02 15:44) [38]

> [36] Rouse_ ©   (02.09.11 15:39)
> я то речь веду про виртуальную память

Так на то и виртуальная, чтобы без надобности не читать в ОЗУ. Зачем, если данные или код могут не разу не понадобиться


 
Игорь Шевченко ©   (2011-09-02 16:30) [39]

FileMon показывает чтение в физическую память :)


 
Anatoly Podgoretsky ©   (2011-09-02 16:50) [40]

> Юрий Зотов  (02.09.2011 15:20:34)  [34]

resourcestring именно такой, не гонится в своп, он сам часть свопа



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.004 c
2-1313176699
Leon-Z
2011-08-12 23:18
2011.12.18
Размер BLOB поля.


2-1315587791
Rucosinus
2011-09-09 21:03
2011.12.18
Просмотр шрифтов из папки


15-1315168191
Юрий
2011-09-05 00:29
2011.12.18
С днем рождения ! 5 сентября 2011 понедельник


15-1314184414
DVM
2011-08-24 15:13
2011.12.18
Посоветуйте как лучше сделать


6-1248268608
Olleg_ator
2009-07-22 17:16
2011.12.18
POP3 кодировка KOI





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский