linker и сегмент неинициализированных данных
_dat SEGMENT BYTE PUBLIC USE32 'DATA'
ASSUME ds:_dat
Инициализированные данные
_dat ENDS
и
_udat SEGMENT BYTE PUBLIC USE32 'DATA?'
ASSUME ds:_dat
PUBLIC _Array
_Array DB 1000000 dup (0)
_udat ENDS
Первый сегмент - инициализированные данные, они включаются в obj. Второй сегмент - неинициализированные данные, они не должны включаться в obj и exe файлы.
Когда я компилировал и linker'ил эти исходники на Watcom C (и на tasm32), все было OK.
Но вот я решил пересесть на Visual C++ и писать под Windows. Tasm32 нормально отассемблировал этот исходник. Но когда полученный им obj встретил linker Visual C++, он:
1). Сообщил:
"warning LNK4033: converting object format from OMF to COFF"
2). До-о-олго тормозил. (Точнее, долго тормозил он перед пунктом 1)
3). Сделал мой exe'шник размером больше мегабайта.
Я так понимаю, он весь этот Array, заполненный нулями, включил в exe'шник. Зачем?????????????????????????????????????
Подскажите, пожалуйста, как сказать ему, чтобы он нормально обрабатывал сегмент неинициализированных данных.
_BSS SEGMENT PARA PUBLIC USE32 'BSS'
PUBLIC _Array
_Array DB 1000000 dup (?)
_BSS ENDS
Тогда и тормозить не будет и размер будет нормальный. BSS - сегмент неинициализированных данных компилируемого модуля.