Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > [C++]Размер файла после подключения fstream.h


Автор: qwerty789 22.1.2008, 13:44
Привет, использовал в программе ifstream из fstream.h и размер скомпилированого файла сразу увеличился в 10 раз примерно...
Код приводить не стал, так как в любом случае при использовании чего то из iostream, ifsteam размер собранной программы увеличивается очень сильно. Компилятор использовался gcc 4.2.1. Вообщем хотелось бы узнать из за чего это происходит и как избежать такого увеличения...

Автор: JackYF 22.1.2008, 14:05
Цитата(qwerty789 @  22.1.2008,  12:44 Найти цитируемый пост)
Компилятор использовался gcc 4.2.1. Вообщем хотелось бы узнать из за чего это происходит и как избежать такого увеличения...

параметры, передаваемые g++ - в студию!
возможно, стоит воспользоваться ключом -s.

Автор: qwerty789 22.1.2008, 15:04
Параметры -s и -Os

Автор: bsa 22.1.2008, 15:04
Скорее всего добавился отладочный код - от него программа сильно разбухает.

Добавлено через 2 минуты и 37 секунд
qwerty789, ты всю строку компиляции приведи.

Автор: qwerty789 22.1.2008, 15:10
А как это можно проверить?
-s параметр должен вырезать отладочный код...
Среда codeblocks...

Добавлено через 13 минут и 53 секунды
Я через ide компилирую...где мне посмотреть остальные параметры?

Автор: JackYF 22.1.2008, 15:37
Цитата(qwerty789 @  22.1.2008,  14:10 Найти цитируемый пост)
Среда codeblocks...

в настройках компилятора там есть пункт - "показывать всю командную строку компиляции". Вот выбери её, и дай нам.
А вообще в кодеблоках ставишь релизную сборку - оно само -s и -Ox поставит.

Добавлено через 1 минуту и 28 секунд
 smile вот они, недостатки любой IDE, даже самой простой: чтобы понять, как она вызывает бэкэнды, нужно иногда изрядно повозиться.

Автор: qwerty789 22.1.2008, 16:31
-------------- Сборка: Release  ---------------
mingw32-g++.exe  -Wall   -Wall  -O3    -IC:\MinGW\bin  -c C:\CodeBlocks\Projects\main\main.cpp -o obj\Release\main.o
mingw32-g++.exe -LC:\MinGW\bin  -o bin\Release\main.exe obj\Release\main.o   -s -s -s  C:\MinGW\lib\libws2_32.a 
Output size is 261,00 KB

Вот полная строка...

Автор: JackYF 22.1.2008, 16:36
qwerty789, 261 килобайт - это много?

Автор: qwerty789 22.1.2008, 16:40
Было 20кб, может я конечно чего то не понимаю... =)

Автор: Dronchik 22.1.2008, 16:51
JackYF, это конешно оффтоп но есть такая операционка, ты о ней уверен что слышал. Я про Колибри говорю. Так там всё гдета по 10 клиобайт стоит.
 
qwerty789, Перепроверь подключаемые библиотеки. Я под gcc не сидел но в Visual C++ 6 я для уменьшения размера иногда проверяю и коментирую на время некоторые части в заголовочных стандартных файлах специально для проги. Просмотри ifstream, какая функция может занять столько места. И закоментируй её(если конешно не будешь использовать). 

Автор: qwerty789 22.1.2008, 16:55
Спасибо, попробую сегодня...чуть позже отпишу результат...

Автор: bsa 22.1.2008, 16:59
попробуй еще ключ -g0

Автор: JackYF 22.1.2008, 17:09
Цитата(Dronchik @  22.1.2008,  15:51 Найти цитируемый пост)
Так там всё гдета по 10 клиобайт стоит.

а есть ещё операционка, GNU/Linux называется. Так там много компилируется динамически, и маленькие программки тоже маленькие.
А есть всё писать на ассемблере, тогда да, бинарники маленькие будут. Только это капец, извините, с точки зрения архитектуры.

Автор: qwerty789 22.1.2008, 17:52
Цитата(bsa @ 22.1.2008,  16:59)
попробуй еще ключ -g0

ничего не изменилось...

Автор: MAKCim 22.1.2008, 18:04
Цитата(qwerty789 @  22.1.2008,  16:31 Найти цитируемый пост)
C:\MinGW\lib\libws2_32.a 

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

Автор: qwerty789 22.1.2008, 18:13
не, если закомментировать код который использует fstream.h то будет 20кб...вместе с этой библиотекой...

Автор: archimed7592 22.1.2008, 19:08
Цитата(JackYF @  22.1.2008,  15:37 Найти цитируемый пост)
вот они, недостатки любой IDE

0_о
Ок, отбросим "детские" IDE'шки. Те с которыми мне сейчас частенько приходится работать: MSVS и Eclipse. Обе лишены этих недостатков. Думаю, что многие другие IDE также не имеют подобного недостатка.

По теме: какие ключики не указывай, с mingw-gcc-3.4.x 10-20 КБ не получишь. Можно, как вариант, попробовать GCC-4.2 technology preview 2, в которой есть возможность собирать вместе с динамической CRTL(но я бы поостерёгся - всё таки TP), либо собрать STLport в виде дин. либы, и использовать её, но, что там, что там ты получишь малюсенькую программку и огромную dll'ку, т.е., по сути, разницы не будет, точнее она будет, если у тебя в одной папке будет лежать сотня программ.

Автор: JackYF 22.1.2008, 20:17
Цитата(archimed7592 @  22.1.2008,  18:08 Найти цитируемый пост)
Те с которыми мне сейчас частенько приходится работать: MSVS и Eclipse. Обе лишены этих недостатков. 

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

Автор: qwerty789 22.1.2008, 20:21
Использование dll выходом не считаю в данном случае...
Cейчас скомпилировал прогу в билдере, получилось 39кб... 

Не мог же я первый столкнуться с этим вопросом =)

Автор: archimed7592 22.1.2008, 20:23
Цитата(JackYF @  22.1.2008,  20:17 Найти цитируемый пост)
и ту и другую я уже давненько не видел...

Что сейчас в моде у линуксоидов? smile

Цитата(JackYF @  22.1.2008,  20:17 Найти цитируемый пост)
они показывают полные командные строки компиляции?

Угумс.

Цитата(JackYF @  22.1.2008,  20:17 Найти цитируемый пост)
а мэйкфайлы генерить позволяют, чтоб можно было скомпилить без наличия графической оболочки?
Eclipse именно так и работает(точнее так и работал - сейчас добавили internal builder, но возможность такая осталась), а MSVC - пунктик "makefile project" есть... то это или не то - не проверял.

Добавлено через 3 минуты и 4 секунды
Цитата(qwerty789 @  22.1.2008,  20:21 Найти цитируемый пост)
Cейчас скомпилировал прогу в билдере, получилось 39кб... 

Угу, и ей требуется какой-нибудь bcbrtl60, да? smile
Это и называется "маленькая прога + большая dll". MSVC - аналогично: требуется msvcrt80.dll.
Ну, а когда делаешь так, чтобы ничего не требовалось, то получается как раз вот такие "большие программы".

Автор: TaNK 23.1.2008, 09:13
Код

         //22.01.2008 17:12:45
#include <vcl.h>
#include <iostream>
#include <fstream>
#include <cctype>

int main()
{
  using namespace std;
  char filename[60],ch;
  float fl;
  ifstream ifile;
  cout << "Vvedite nazvanie faila - ";

  cin.getline(filename,60);
  ifile.open(filename); // открываем выбранный файл

  if (!ifile.is_open())
     {
       cout << "Neniden fail";
       cin.get();
       exit(EXIT_FAILURE);
     }

  int count = 0;

  ifile >> fl;
  float *fl_mas = new float [10]; // массив из 10 float
  while (!ifile.eof())
   {

       fl_mas[count] = fl;  // загоняем в массив элементы находящиеся в файле
       count++;
       ifile >> fl;

   }

  cout << count << " " << endl;

  for (int i = 0; i < count; i++)
    cout << fl_mas[i]<< " ";

  ifile.close(); // закрываем файл
  delete [] fl_mas; // удаление памяти выделеной под массив float

  cin.get();
  return 0;
}

Занимает 34,5 кБ IDE С++ Builder 6

Автор: archimed7592 23.1.2008, 09:21
TaNK, заархивируй и приатач .exe файл.

Автор: TaNK 23.1.2008, 11:00
лови

Автор: archimed7592 23.1.2008, 11:14
Лови: http://ipicture.ru/Gallery/Viewfull/378769.html
Посчитай теперь размер файлов, которые выделены красными прямоугольниками(спешу огорчить: у меня твой project2 не запускается).

А лучше прочитай внимательней этот http://forum.vingrad.ru/index.php?showtopic=192450&view=findpost&p=1388735(конец).

К слову, STLPMT45 - это тот самый STLport в виде .dll о котором я и говорил(в билдере родной STL является именно древний STLport).

Автор: TaNK 23.1.2008, 11:33
archimed7592  - я подумал что у qwerty789 файл увиличивается в 10 раз только при использовании ifstream, а у меня конечно в exe-файл не были добавлены все *.bpl и dll

Автор: JackYF 23.1.2008, 11:45
 smile 
Цитата(archimed7592 @  22.1.2008,  19:23 Найти цитируемый пост)
Что сейчас в моде у линуксоидов?

vim  smile 

Автор: archimed7592 23.1.2008, 11:56
Я понимаю, когда emacs IDE обзывают, но vim - это же редактор с подсветкой... Или я глубоко заблуждаюсь?

Автор: bsa 23.1.2008, 11:59
Цитата(archimed7592 @ 23.1.2008,  11:56)
Я понимаю, когда emacs IDE обзывают, но vim - это же редактор с подсветкой... Или я глубоко заблуждаюсь?

мне рассказывали, что из него можно запустить make одной клавишей  smile 

Автор: JackYF 23.1.2008, 13:12
Цитата(archimed7592 @  23.1.2008,  10:56 Найти цитируемый пост)
Или я глубоко заблуждаюсь?

ну как сказать... авдополнение - есть. С member selection я ещё не разобрался, но тоже есть smile

Цитата(bsa @  23.1.2008,  10:59 Найти цитируемый пост)
мне рассказывали, что из него можно запустить make одной клавишей

забиндить можно любую команду на любое сочетание smile
я запускаю через ":mak".

Конечно, сие далеко не полноценная IDE... Но то, что он позволяет делать, он делает быстро и гибко. Привыкнуть надо малёхо, конечно smile

Автор: archimed7592 23.1.2008, 13:22
В общем, как и emacs - это многофункциональный редактор(я склонен называть такие вещи именно так smile).

Добавлено через 2 минуты и 41 секунду

M
archimed7592
Оффтоп заканчиваем. Угу?

Автор: qwerty789 23.1.2008, 17:16
Интересно конечно почитать вашу беседу, но я спрашивал конкретно про то что, при компиляции gcc например вот этого
Код

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    return 0;
}



Получается 

-------------- Сборка: Release в testtt ---------------
mingw32-g++.exe -Wall  -O2  -O3   -IC:\MinGW\bin  -c C:\CodeBlocks\Projects\testtt\main.cpp -o obj\Release\main.o
mingw32-g++.exe -LC:\MinGW\bin  -o bin\Release\testtt.exe obj\Release\main.o   -s -s  
Output size is 257,00 KB
Получается не маленький размер...

Добавлено через 2 минуты и 13 секунд
При использовании чегонибудь из fstream.h, такой же размер примерно...

Добавлено через 8 минут и 49 секунд
а если так сделать, то совсем другой размер...

Код

#include <stdio.h>

int main()
{
    printf("Hello World!");
    return 0;
}



-------------- Сборка: Release в testtt ---------------
mingw32-g++.exe -Wall  -O2  -O3   -IC:\MinGW\bin  -c C:\CodeBlocks\Projects\testtt\main.cpp -o obj\Release\main.o
mingw32-g++.exe -LC:\MinGW\bin  -o bin\Release\testtt.exe obj\Release\main.o   -s -s  
Output size is 5,50 KB

Автор: archimed7592 23.1.2008, 17:53
Дело в том, что, в том или ином виде, почти всю ф-циональность стандартной библиотеки Си реализует msvcrt.dll(которая, надо понимать, есть в любой винде), на которую, в свою очередь идут ссылки из получаемого бинарника.
Что же касается C++RTL - там не всё так просто, и поэтому большая часть кода дислоцируется в вашем бинарнике(в данном случае).

Автор: jmp 24.1.2008, 05:21
qwerty789, мда, вот в ВС2005 у меня тоже получались еХешники на 10 кб, но и у половины пользователей отказыввались запускаться....впринципе я не "ропщу" на MingW уж лучше 300кб и 100% работоспособность, чем 5кб и ошибка вида "Приложению не удалось запуститься поскольку оно некорректно настроено" у всех кто не ставил Visual C++ Redistributable Package..

Автор: JackYF 24.1.2008, 10:15
Цитата(jmp @  24.1.2008,  04:21 Найти цитируемый пост)
уж лучше 300кб и 100% работоспособность, чем 5кб и ошибка вида "Приложению не удалось запуститься поскольку оно некорректно настроено" у всех кто не ставил Visual C++ Redistributable Package.. 

Отлично сказано.

Автор: Dronchik 24.1.2008, 16:35
Dev C++ 4,9,9,1 - 468 кб. 
MS Visual C++ 6 SP5 - 216 кб. 
Компилировал без какой либо оптимизации компилятором.

Цитата(jmp @  24.1.2008,  05:21 Найти цитируемый пост)
впринципе я не "ропщу" на MingW уж лучше 300кб и 100% работоспособность, чем 5кб и ошибка вида "Приложению не удалось запуститься поскольку оно некорректно настроено" у всех кто не ставил Visual C++ Redistributable Package..

 smile +1

Автор: qwerty789 24.1.2008, 20:33
Всем спасибо за активное участие в моем обучении smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)