-3
     // main.cpp
 #include <iostream>
 #include "Color.h"
 #include <string>
 #include "readFile.h"
using namespace std;
int main(void){
cout << RED <<  openReadf("Name.txt", true) << RESET << endl;
     closeReadf();
  return 0;

}


   // feadFile.h
         #include <iostream>
         #include <fstream>
         #include <string.h>
         #include <stdio.h>
         #include "Color.h"
 //buffer static
  static char buffer[100000] [100000];
  //clear buffer
 int closeReadf(){
 memset(buffer, 0, sizeof(buffer));

return 0; } //method for reading files std :: string openReadf(std :: string rFile,bool inText){ int i = 0; std :: ifstream file; std ::string inPut; file.open(rFile); if(file.is_open()){

         while(!file.eof()){  // check for file existence
                  // buffer overflow check
              if(sizeof(buffer) &gt;= 100000){    std::cout &lt;&lt; RED&lt;&lt;&quot;FatalError: BUFFER OVERFLOW &quot; &lt;&lt; RESET &lt;&lt; std:: endl;  
         closeReadf();
                     }
// file reading                        
    file.getline(buffer[i],sizeof(buffer));

if (inText == true){ //output file content inPut += buffer[i]; inPut += "\n"; } i++; }
} else{ std :: cout << RED <<"FatalError: Not Found File 404" << RESET<< std :: endl; std :: cin.get(); inPut == "";
} file.close(); return inPut; }


   // Color.h

//Symbol color #define RED "\033[1;31m" #define BLUE "\033[0;34m" #define RESET "\033[0m" #define WHITE "\033[1;37m" #define YELLOW "\033[0;33m" #define GREEN "\033[0;32m" #define BLACK "\033[0;30m" //BackGraund #define BGRESET "\033[40m" #define BGRED "\033[41m" #define BGGREEN "\033[42m" #define BGBROWN "\033[43m" #define BGBLUE "\033[44m"

Harry
  • 221,325
Sin21
  • 3
  • 2
  • 3
    Разрешите приступить к оптимизации? :-) – Артём Оконечников Dec 23 '20 at 22:37
  • Можно начать с флажка -O2 – Vladimir Gamalyan Dec 24 '20 at 01:48
  • Под Linux на компиляторах GCC/CLang есть даже флаг -O3 для максимальной оптимизации. – Arty Dec 24 '20 at 02:39
  • Одна очевидная оптимизация по памяти - это что вам возможно не нужен двумерный массив для buffer. В коде не обязательно читать каждую новую порцию данных в отдельный буфер buffer[i]. Можно читать в один и тот же, одномерный, использовать его и читать снова в его же. Конечно если у вас там нет какого то секретного скрытого замысла чтобы иметь двумерный буфер. – Arty Dec 24 '20 at 02:49
  • 3
    while(!file.eof()){ - наверное, пора стандарт переписывать, потому что сия ошибка просто вечная... – Harry Dec 24 '20 at 03:14

1 Answers1

1

Да сколько угодно...

Например, openReadf замените просто

for(;;) std::cout << RED<<"FatalError: BUFFER OVERFLOW " << RESET << std:: endl;  

Все равно ведь у вас, раз вы ничего не читаете из файла,

while(!file.eof())

всегда истинно, а так как buffer объявлен как

static char buffer[100000] [100000];

то и sizeof(buffer) >= 100000 всегда истинно, так что

while(!file.eof())
{  
    if(sizeof(buffer) >= 100000){    std::cout << RED<<
    "FatalError: BUFFER OVERFLOW " << RESET << std:: endl;  
    closeReadf();

}

превращается в бесконечный цикл, выводящий одну и ту же строку. Вызов closeReadf() при этом теряет всякий смысл...

Соответственно, и вся программа тоже оптимизируется до

int main(void)
{
    cout << RED;
    for(;;) std::cout << RED<<"FatalError: BUFFER OVERFLOW " << RESET << std:: endl;  
}

(правда, при наличии файла Name.txt).

Да! Забыл главное - если у вас программа 32-битная, то она оптимизируется до полного отсутствия, ибо столько памяти - порядка 10 Гбайт -

char buffer[100000] [100000];

она просто будет не в состоянии адресовать...

Harry
  • 221,325