[ 
https://issues.apache.org/jira/browse/STDCXX-231?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12563812#action_12563812
 ] 

Martin Sebor commented on STDCXX-231:
-------------------------------------

Wow, that's quite an improvement! IMO, not deallocating string memory on 
{{clear()}} or {{erase()}} makes perfect sense. I'm just not completely sure 
that it isn't too big a change for a micro release. If there is code out there 
that's optimized for space and that assumes these functions have deallocating 
semantics we might be changing its performance characteristics in an unexpected 
way. I might feel more comfortable if I knew that most other implementations 
did deallocate... Then again, maybe I'm being overly cautious...

> std::getline from <string> header is rather slow
> ------------------------------------------------
>
>                 Key: STDCXX-231
>                 URL: https://issues.apache.org/jira/browse/STDCXX-231
>             Project: C++ Standard Library
>          Issue Type: Improvement
>          Components: 21. Strings
>    Affects Versions: 4.1.2, 4.1.3, 4.1.4, 4.2.0
>            Reporter: Martin Sebor
>            Assignee: Travis Vitek
>             Fix For: 4.2.1
>
>         Attachments: stdcxx-231.patch
>
>   Original Estimate: 4h
>          Time Spent: 4h
>  Remaining Estimate: 4h
>
> Moved from the Rogue Wave bug tracking database:
> {noformat}
> ****Created By: leroy @ Jan 25, 2001 03:20:01 PM****
> Environment
>   Compiler : SUNPRO 4.2
>   OS : Solaris 2.5.1
>   SCL : 1.3.0 (Summer-1999)
>   Tools : 7.1.0 (Summer-1999) --> Use only for RWBench
> Command line option :
>   for debug : 
>   CC -xildoff +w +p -g -o Test_dbg.exe test.cc -DRWDEBUG=1 
> -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/11s 
> -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/11s/include -I. 
> -L/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/11s/lib -Bstatic 
> -ltls11s -lstd11s -Bdynamic
>   for release :
> CC -xildoff +w +p -fast -o Test_release.exe test.cc 
> -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/8s 
> -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/8s/include -I. 
> -L/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/8s/lib -Bstatic 
> -ltls8s -lstd8s -Bdynamic
>  (Uploaded file: 997149-test.cc)                                              
>                                                                               
>                                                                               
>                                                                               
>                                                                               
>                              
> **** Entered By: Web @ Thursday, January 25, 2001 2:41:42 AM **** 
> Location of uploaded file: 
> http://thoth.bco.roguewave.com/uploads/997149-test.cc
> View all uploaded files for this incident: 
> http://webdev.roguewave.com/admin/tsvw/index.cfm?IncidentID=997149            
>                                                                               
>                                                                               
>                                                                               
>                                                                               
>                                                                               
>                                                                               
>                                                                               
>                                                                               
>                                                                               
>                                                                               
>                                                                               
>                                                                               
>                                                                               
>                                                         
> **** Entered By: Web @ Thursday, January 25, 2001 2:44:56 AM **** 
> #web
> Please find my test case at the end of the note
> Environment
>   Compiler : SUNPRO 4.2
>   OS : Solaris 2.5.1
>   SCL : 1.3.0 (Summer-1999)
>   Tools : 7.1.0 (Summer-1999) --> Use only for RWBench
> Command line option :
>   for debug : 
>   CC -xildoff +w +p -g -o Test_dbg.exe test.cc -DRWDEBUG=1 
> -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/11s 
> -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/11s/include -I. 
> -L/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/11s/lib -Bstatic 
> -ltls11s -lstd11s -Bdynamic
>   for release :
> CC -xildoff +w +p -fast -o Test_release.exe test.cc 
> -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/8s 
> -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/8s/include -I. 
> -L/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/8s/lib -Bstatic 
> -ltls8s -lstd8s -Bdynamic
> #Code
> #include <string>
> #include <fstream.h>
> #include <iostream.h>
> #include <rw/bench.h>
>  
>  
> class std_string_getline : public RWBench
> {
>   public:
>    std_string_getline() {;}
>  
>    void doLoop(unsigned long n);
>    void idleLoop(unsigned long n);
>    void what(ostream& os) const { os << "Standard String Getline : " << endl;}
> };
>  
> class classic_getline : public RWBench
> {
>   public:
>     classic_getline() {;}
>  
>     void doLoop(unsigned long n);
>     void idleLoop(unsigned long n);
>     void what(ostream& os) const { os << "Classic Getline : " << endl;}
> };
>  
> int
> main(int argc, char** argv)
> {
>  
>   std_string_getline test_std_string;
>   test_std_string.parse(argc, argv);
>   test_std_string.go();
>   test_std_string.report(cout);
>  
>   classic_getline test_classic_getline;
>   test_classic_getline.parse(argc, argv);
>   test_classic_getline.go();
>   test_classic_getline.report(cout);
> }
>  
> void
> std_string_getline::doLoop(unsigned long n)
> {
>   while (n--)
>   {
>     ifstream toRead(__FILE__);
>     string line;
>     line.reserve(512);
>  
>     while (!(toRead.eof()))
>     {
>       getline(toRead, line, '\n');
>     }
>   }
> }
>  
> void
> std_string_getline::idleLoop(unsigned long n)
> {
>   while (n--)
>   {
>     ifstream toRead(__FILE__);
>     string line;
>     line.reserve(512);
>   }
> }
>  
> void
> classic_getline::doLoop(unsigned long n)
> {
>   while (n--)
>   {
>     ifstream toRead(__FILE__);
>     char cLine[512];
>     string line;
>     line.reserve(512);
>  
>     while (!(toRead.eof()))
>     {
>       toRead.getline(cLine, 512);
>       line = cLine;
>     }
>   }
> }
>  
> void
> classic_getline::idleLoop(unsigned long n)
> {
>   while (n--)
>   {
>     ifstream toRead(__FILE__);
>     char cLine[512];
>     string line;
>     line.reserve(512);
>   }
> }
> #EndCode                
> There appears to be something to this.  I ran the program and here is the 
> output:
> Sun C++ 
> Standard String Getline : 
> Iterations:                 1
> Inner loop operations:      1000
> Total operations:           1000
> Elapsed (user) time:        18.18
> Operations per second:      55.0055
> Sun C++ 
> Classic Getline : 
> Iterations:                 5
> Inner loop operations:      1000
> Total operations:           5000
> Elapsed (user) time:        4.67
> Kilo-operations per second: 1.07066
> {noformat}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to