c++ - enabled exception handling and generated code
- Heinz Saathoff (65/65) Dec 11 2006 Hello Walter,
Hello Walter, I compiled this code --------- code --------- #include <dos.h> #include <string> #include <vector> struct SInOut { std::string in_name; std::string out_name; }; std::vector<SInOut> io_names; void AddExpandedWild(const char *arg) { SInOut names; for(FIND *f = findfirst(arg, 0); f!=0; f=findnext()) { names.in_name = f->name; io_names.push_back(names); }//for }//AddExpandedWild ------ end code -------- with this complier switches dmc -IE:\dm\stlport\stlport -Ae -o+all -c example.cpp and disassembled the resulting OBJ-file. In the disassembled code I found many unnecessary instructions and wondered why they are included. Part of the diessassembled code shown here: [snip] L8E: mov dword ptr -4[EBP],0FFFFFFFFh <---- ??? mov dword ptr -4[EBP],3 <---- ??? mov dword ptr -4[EBP],4 <---- ??? mov dword ptr -4[EBP],3 <---- ??? mov dword ptr -4[EBP],5 <---- ??? mov dword ptr -4[EBP],3 <---- ??? mov dword ptr -4[EBP],6 mov EAX,-018h[EBP] lea ECX,-018h[EBP] sub EAX,-020h[EBP] push EAX push dword ptr -020h[EBP] call near ptr void syscall std::D::d::allocator<>::deallocate(char *,unsigned )const mov dword ptr -4[EBP],3 <---- ??? mov dword ptr -4[EBP],7 <---- ??? mov dword ptr -4[EBP],3 <---- ??? mov dword ptr -4[EBP],0FFFFFFFFh <---- ??? mov dword ptr -4[EBP],8 <---- ??? mov dword ptr -4[EBP],0FFFFFFFFh <---- ??? mov dword ptr -4[EBP],9 mov EBX,-024h[EBP] lea ECX,-024h[EBP] sub EBX,-02Ch[EBP] push EBX push dword ptr -02Ch[EBP] call near ptr void syscall std::D::d::allocator<>::deallocate(char *,unsigned )const mov dword ptr -4[EBP],0FFFFFFFFh <---- ??? mov dword ptr -4[EBP],0Ah <---- ??? mov dword ptr -4[EBP],0FFFFFFFFh mov EAX,-0Ch[EBP] mov FS:__except_list,EAX [snip] I assume that this moves have something to do with exception handling. But I would also assume that the optimizer should be able to remove the unnecessary moves. BTW, Compiler version from SCPPN.EXE is 8.48.10n - Heinz
Dec 11 2006