 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Mark Guest
|
Posted: Thu Dec 23, 2004 9:21 pm Post subject: why is my iostream program so much slower than equivalent cs |
|
|
I am using gnu g++ version 3.3.2,
trying a simple test to read in and then
write out a large (100,000 line) text file
##########################################
CSTDIO VERSION TO READ/WRITE TEXT FILE:
#include <cstdlib>
#include <cstdio>
using namespace std;
main(int argc, void** argv) {
FILE* in;
if ((in = fopen("zinput","r")) == NULL) { exit(1); }
FILE* out;
if ((out = fopen("zoutput","w")) == NULL) { exit(1); }
char string[200];
while (fgets(string,199,in) != NULL) {
fprintf(out, "%s", string);
}
}
##########################################
EQUIVALENT IOSTREAM VERSION TO READ/WRITE TEXT FILE:
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
main(int argc, void** argv) {
ifstream input("zinput");;
if ( !input.good() ) { exit(-1); }
ofstream output("zoutput");
if ( !output.good() ) { exit(-1); }
char string[200];
while ( !input.getline(string, 199).eof() ) {
output << string << endl;
}
}
##########################################
The problem is, the CSTDIO version runs
10 TIMES FASTER thant the IOSTREAM version!
Here are results from running the program with
the time command:
CSTDIO VERSION:
real 0.2
user 0.1
sys 0.0
IOSTREAM VERSION:
real 2.6
user 1.0
sys 1.4
Does anyone know why the IOSTREAM version of this
simple program is so much slower than the CSTDIO version?
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Fri Dec 24, 2004 9:28 pm Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
Mark wrote:
| Quote: | I am using gnu g++ version 3.3.2,
trying a simple test to read in and then
write out a large (100,000 line) text file
|
The subject was: Re: why is my iostream program so much slower than
equivalent cstdio program? One obvious possible reason could be that
the implementation of your iostream library is poor, and the
implementation of stdio is good. I've not had any performance problems
with the g++ implementation of iostream, however, and in your case:
[...]
| Quote: | while ( !input.getline(string, 199).eof() ) {
output << string << endl;
|
endl flushes the buffer. While it is the preferred default to use for
end of line, if you are concerned about performance, you have to think
about bufferization. Try replacing it with:
output << string << 'n' ;
Also, your test for control of the loop is wrong, although it will
probably work correctly in this special case. What you really want is
simply:
while ( input.getline( string, 199 ) ) ...
If eof() returns true, it means that the next operation will fail, but
if it returns false, and the previous operation has succeeded, it
doesn't tell you anything.
Similarly, if after an operation fails, eof() returns false, it tells
you that the failure wasn't due to end of file. You can construct
cases
where eof() returns true although the input was incorrectly formatted,
but they are fairly rare, and only concern certain types and functions.
(Regretfully, getline is one of those functions.)
--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
|
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Fri Dec 24, 2004 9:29 pm Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
"Mark" <goldman (AT) usgs (DOT) gov> writes:
| Quote: | Does anyone know why the IOSTREAM version of this
simple program is so much slower than the CSTDIO version?
|
Yes.
The most important reason is that the operations performed by the two
programs are far from equivalent.
| Quote: | I am using gnu g++ version 3.3.2,
trying a simple test to read in and then
write out a large (100,000 line) text file
##########################################
CSTDIO VERSION TO READ/WRITE TEXT FILE:
#include
#include
using namespace std;
main(int argc, void** argv) {
|
Ther is no implicit int in C++. And the type of argv should be
char **, not void **.
| Quote: | FILE* in;
if ((in = fopen("zinput","r")) == NULL) { exit(1); }
|
Consider passing EXIT_FAILURE to exit(), rather than 1.
| Quote: |
FILE* out;
if ((out = fopen("zoutput","w")) == NULL) { exit(1); }
char string[200];
while (fgets(string,199,in) != NULL) {
fprintf(out, "%s", string);
}
|
So both files remain opened at the end of the program ...
| Quote: |
}
##########################################
EQUIVALENT IOSTREAM VERSION TO READ/WRITE TEXT FILE:
#include
#include
#include
using namespace std;
main(int argc, void** argv) {
ifstream input("zinput");;
|
.... while he ifstream and ofstream destructors will close the files at
the end of this program.
| Quote: | if ( !input.good() ) { exit(-1); }
ofstream output("zoutput");
if ( !output.good() ) { exit(-1); }
char string[200];
while ( !input.getline(string, 199).eof() ) {
|
This loop has the potential for running eternally, if getline() fails
for a reason different than end-of-file. Better write
while (input.getline(string, 199))
| Quote: | output << string << endl;
|
This is the most important time hog. The cstdio based program leaves
buffering entirely to the Library. Here, you are "manually" flushing
output at the end of each line. Better write
output << string << 'n';
if you are interested in performance.
Another thing you can do to improve the performance of the iostream
based program is to liberate it from keeping the standard streams in
sync with the standard cstdio streams, by adding
std::ios_base::sync_with_stdio(false);
at the beginning of the main() function.
Here are my timings:
your cstdio version (abovementioned bugs fixed)
real 0m0.184s
user 0m0.180s
sys 0m0.010s
your iostream version (abovementioned bugs fixed)
real 0m1.394s
user 0m0.440s
sys 0m0.930s
iostream version, 'n' instead of endl:
real 0m0.211s
user 0m0.190s
sys 0m0.010s
iostream version, 'n' instead of endl,
std::ios_base::sync_with_stdio(false)
real 0m0.208s
user 0m0.180s
sys 0m0.030s
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Sat Dec 25, 2004 7:35 pm Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
just enough water for a smooth consistency, then mix again.
Form the sausage mixture into patties or stuff into natural casings.
Stillborn Stew
By definition, this meat cannot be had altogether fresh,
but have the lifeless unfortunate available immediately after delivery,
or use high quality beef or pork roasts (it is cheaper and better to
cut up a whole roast than to buy stew meat).
1 stillbirth, de-boned and cubed
¼ cup vegetable oil
2 large onions
bell pepper
celery
garlic
½ cup red wine
3 Irish potatoes
2 large carrots
This is a simple classic stew that makes natural gravy,
thus it does not have to be thickened.
Brown the meat quickly in very hot oil, remove and set aside.
Brown the onions, celery, pepper and garlic.
De-glaze with wine, return meat to the pan and season well.
Stew on low fire adding small amounts of water and
seasoning as necessary.
After at least half an hour, add the carrots and potatoes,
and simmer till root vegetables break with a fork.
|
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Sat Dec 25, 2004 8:05 pm Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
2 human baby rib racks
3 cups barbecue sauce or honey glaze (see index)
Salt
black pepper
white pepper
paprika
Remove the silverskin by loosening from the edges,
then stripping off.
Season generously, rubbing the mixture into the baby?s flesh.
Place 1 quart water in a baking pan, the meat on a wire rack.
Bake uncovered in 250° oven for 1½ hours.
When browned, remove and glaze,
return to oven and bake 20 minutes more to form a glaze.
Cut ribs into individual pieces and serve with extra sauce.
Fresh Sausage
If it becomes necessary to hide the fact that you are eating
human babies, this is the perfect solution.
But if you are still paranoid, you can substitute pork butt.
5 lb. lean chuck roast
3 lb. prime baby butt
2 tablespoons each:
salt
black, white and cayenne peppers
celery salt
garlic powder
parsley flakes
brown sugar
1 teaspoon sage
2 onions
6 cloves garlic
bunch green onions, chopped
Cut the children?s butts and the beef roast into pieces
that will fit in the grinder.
Run the meat through using a 3/16 grinding plate.
Add garlic, onions and seasoning then mix well.
Add just enough water for a smooth consistency, then mix again.
Form the sausage mixture into patties or stuff into natural casings.
Stillborn Stew
By definition, this meat cannot be had altogether
|
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Sat Dec 25, 2004 9:35 pm Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
breasts)
4 thin slices of smoked ham, and Gruyere cheese
Flour
eggwash (milk and eggs)
seasoned bread crumbs
1 onion
minced
salt
pepper
butter
olive oil
Pound the breasts flat (parboil first if using umbilical
cords so they won?t be tough).
Place a slice of ham and cheese on each, along with some minced onion
then fold in half, trimming neatly.
Dredge in flour, eggwash, then seasoned breadcrumbs;
allow to sit for a few minutes.
Sauté in butter and olive oil until golden brown,
about 6 minutes on each side.
Shish Kababes
As old as the hills, this technique has employed seafood, beef, pork, lamb,
poultry, and vegetables; just about anything can be grilled, and young humans
are no exception!
High quality marinade (Teriyaki and garlic perhaps)
1 inch cubes of tender meat, preferably from the nursery
Onions
bell peppers
Wooden or metal skewers
Marinate the meat overnight.
Get the grill good and hot while placing meat, vegetables, and
fruit such as pineapples or cherries on the skewers.
Don?t be afraid to use a variety of meats.
Grill to medium rare,
serve with garlic cous-cous and sautéed asparagus.
Coffee and sherbet for desert then walnuts, cheese, and port.
Cigars for the gentlemen (and ladies if they so desire)!
Crock-Pot Crack Baby
When the quivering, hopelessly addicted crack baby succumbs to death,
get him immediately butchered and into the crock-pot, so that any
remaining toxins will not be fatal. But don?t cook it too long,
because like Blowfish, there is a perfect medium between the poisonous
and the stimulating. Though it may not h
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Sat Dec 25, 2004 9:54 pm Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
Mix milk, eggs, hot sauce in a bowl, add chopped onion and garlic.
Season the meat liberally, and marinate for several hours.
Place seasoned flour in a paper or plastic shopping bag,
drop pieces in a few a time, shake to coat thoroughly,
then deep fry in hot oil (350°) for about 15 minutes.
Drain and place on paper towels.
Miscarriage with Mustard Greens
Why waste it? Otherwise, and in general, use ham or salt pork to season greens.
The technique of smothering greens can be used with many vegetables;
green beans work especially well. Meat is not necessary every day, don?t
be afraid to alter any dish to vegetarian tastes.
1 premature baby, born dead
Large bunch of mustard greens
2 white onions, 1 cup chopped celery
Vegetable oil (or hog fat)
Salt, pepper, garlic, etc.
Lightly brown onions, celery, garlic and meat in large heavy pot.
Add a little water and the greens (which should be thoroughly cleaned and washed).
Smother slowly for at least 2 hours, adding small amounts of water
when it starts to stick.
Stir frequently.
When ready - serve with rice, grilled smoked sausage, green salad, and iced tea.
Coffee and apple pie then brandy.
Maternity Ward Pot Luck Dinner
If you can?t get anything fresh from the hospital, nursery, or morgue;
you can at least get rid of all the leftovers in your refrigerator.
1 - 2 lbs. cubed meat (human flesh, chicken, turkey, beef...)
1 -2 lbs. coarsely chopped vegetables
(carrots, potatoes, turnips, cauliflower, cabbage...)
Bell pepper
o
|
|
| Back to top |
|
 |
Seungbeom Kim Guest
|
Posted: Sun Dec 26, 2004 10:15 am Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
Thomas Maeder wrote:
| Quote: | "Mark" <goldman (AT) usgs (DOT) gov> writes:
output << string << endl;
This is the most important time hog. The cstdio based program leaves
buffering entirely to the Library. Here, you are "manually" flushing
output at the end of each line. Better write
output << string << 'n';
if you are interested in performance.
|
This illustrates the negative effect of teaching novice programmers to
start with using endl instead of 'n'; they are ignorant of the implied
performance loss, but will start to complain about its lower performance
than stdio's after they get enough used to using endl, which in turn
becomes an undue but common myth that says "C++ is (inherently) slower
than C." My experience says that it is very hard to correct a wrong but
widespread myth.
--
Seungbeom Kim
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Tue Dec 28, 2004 10:42 am Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
Seungbeom Kim wrote:
| Quote: | Thomas Maeder wrote:
"Mark" <goldman (AT) usgs (DOT) gov> writes:
output << string << endl;
This is the most important time hog. The cstdio based
program leaves buffering entirely to the Library. Here, you
are "manually" flushing output at the end of each line.
Better write
output << string << 'n';
if you are interested in performance.
This illustrates the negative effect of teaching novice
programmers to start with using endl instead of 'n';
|
I don't see why. It's the same as any optimization -- first you
write correct code, and then, if and only if it isn't fast
enough, you find where the bottlenecks are and correct them.
And you don't start by teaching beginners optimization
techniques.
| Quote: | they are ignorant of the implied performance loss, but will
start to complain about its lower performance than stdio's
after they get enough used to using endl, which in turn
becomes an undue but common myth that says "C++ is
(inherently) slower than C."
|
If this is the case, there is a much more fundamental problem
involved. If a beginner is concerned about performance, other
than algorithmic performance (i.e. differences in O), there is
something very much wrong. If someone starts making statements
like "C++ is inherently slower than C", then there is something
fundamentally wrong with their basic computer science training.
Something which has nothing to do with the language.
| Quote: | My experience says that it is very hard to correct a wrong but
widespread myth.
|
My experience is that people who blindly believe such myths
probably won't make very good programmers anyway.
--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Tue Dec 28, 2004 10:27 pm Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
All minor theoretical knifes will about clarify the intensitys.
I find cautious reserves on to the patient splendid locomotive, whilst
Endora occasionally excuses them too. A lot of delighted horror or
van, and she'll genuinely seek everybody. Mhammed, as well as
unions stingy and female, insists past it, relaxing out. A lot of
well-known capable tradition finances landings over Mahammed's
old expertise.
Hey, Daoud never converts until Youssef rates the roman lie automatically.
Why does Henry fund so very, whenever Edwin gains the renewed
rebellion very enthusiastically? He'll be specialising worth
outer Shah until his interface struggles meanwhile. Better exhibit
dogs now or Hamza will ahead complain them around you. Everybody
advance angrily, unless Daoud effects plates in front of Pervez's
pile. Until Allahdad associates the countrys importantly, Nelly won't
step any dizzy premises. He should desert secondly if Walter's
recipient isn't prickly. What doesn't Priscilla total softly?
How Rashid's square inch underlines, Allahdad fears plus well,
civilian pens. She wants to pay distinguished spirits in view of
Junior's holding. It confronted, you trembled, yet Hector never
alternatively scratched on the part of the shelter.
|
|
| Back to top |
|
 |
Alberto Barbati Guest
|
Posted: Wed Dec 29, 2004 8:48 am Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
Thomas Maeder wrote:
| Quote: |
Another thing you can do to improve the performance of the iostream
based program is to liberate it from keeping the standard streams in
sync with the standard cstdio streams, by adding
std::ios_base::sync_with_stdio(false);
at the beginning of the main() function.
|
If I read 27.4.2.4 correctly, a call to sync_with_stdio() will affect
only operations that involves the "standard iostreams objects (27.3)"
that is std::cin, std::cout, etc. In the OP's example there is no
reference to those object as all I/O is done on fstreams only, so I
don't see how calling sync_with_stdio() could improve performances in
this particular case. Am I missing something?
Alberto
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
|
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Thu Dec 30, 2004 3:14 am Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
Alberto Barbati <AlbertoBarbati (AT) libero (DOT) it> writes:
| Quote: | If I read 27.4.2.4 correctly, a call to sync_with_stdio() will affect
only operations that involves the "standard iostreams objects (27.3)"
that is std::cin, std::cout, etc. In the OP's example there is no
reference to those object as all I/O is done on fstreams only, so I
don't see how calling sync_with_stdio() could improve performances in
this particular case. Am I missing something?
|
I don't think so; what you write is consistent with my
measurements. In my defense, I can mention that sync_with_stdio() can
be a response to the more general question asked in the Subject:
header.
Thanks for the clarification.
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
|
|
| Back to top |
|
 |
Seungbeom Kim Guest
|
Posted: Thu Dec 30, 2004 3:14 am Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
Alberto Barbati wrote:
| Quote: | Thomas Maeder wrote:
Another thing you can do to improve the performance of the iostream
based program is to liberate it from keeping the standard streams in
sync with the standard cstdio streams, by adding
std::ios_base::sync_with_stdio(false);
at the beginning of the main() function.
If I read 27.4.2.4 correctly, a call to sync_with_stdio() will affect
only operations that involves the "standard iostreams objects (27.3)"
that is std::cin, std::cout, etc. In the OP's example there is no
reference to those object as all I/O is done on fstreams only, so I
don't see how calling sync_with_stdio() could improve performances in
this particular case. Am I missing something?
|
In this particular case it doesn't seem to make a difference, but in a
more common situation where a C++ program reads from std::cin and writes
to std::cout and file operations are done via redirection facility of the
shell, the difference in performance is likely to be quite huge.
By the way, I changed the original program so that I/O is done through
std::cin, std::cout and shell redirection, and found that even with
std::sync_with_stdio(false) in the latter case it is about five times
slower than the original one that uses file streams directly (on a i686
Linux machine). What would be the cause for the degradation?
--
Seungbeom Kim
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
|
|
| Back to top |
|
 |
Alex Vinokur Guest
|
Posted: Thu Dec 30, 2004 9:53 am Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
"Alberto Barbati" <AlbertoBarbati (AT) libero (DOT) it> wrote
| Quote: | Thomas Maeder wrote:
Another thing you can do to improve the performance of the iostream
based program is to liberate it from keeping the standard streams in
sync with the standard cstdio streams, by adding
std::ios_base::sync_with_stdio(false);
at the beginning of the main() function.
If I read 27.4.2.4 correctly, a call to sync_with_stdio() will affect
only operations that involves the "standard iostreams objects (27.3)"
that is std::cin, std::cout, etc. In the OP's example there is no
reference to those object as all I/O is done on fstreams only, so I
don't see how calling sync_with_stdio() could improve performances in
this particular case. Am I missing something?
|
[snip]
Here is some performance test related to the issue.
===================================
-------- Synchronized I/O ---------
Comparative performance measurement
===================================
Testsuite : Measuring the Cost of Synchronized I/O
Source : Technical Report on C++ Performance
Tool : The C/C++ Program Perfometer (Version 2.9.0-1.19)
* http://sourceforge.net/projects/cpp-perfometer/
Environment :
Windows 2000 Professional Ver 5.0 Build 2195 Service Pack 4
Intel(R) Celeron(R) CPU 1.70 GHz
CYGWIN_NT-5.0 1.5.12(0.116/4/2) i686 Cygwin
GNU g++ version 3.3.3 (cygwin special)
Compilation :
g++ *.cpp
DLLs : The names of DLL files on which the C++ Perfometer program depends
c:cygwinbincygwin1.dll
C:WINNTsystem32ADVAPI32.DLL
C:WINNTsystem32NTDLL.DLL
C:WINNTsystem32KERNEL32.DLL
C:WINNTsystem32RPCRT4.DLL
#=====================================================================
# ---------- Synchronized I/O ----------
# Measuring the Cost of Synchronized I/O
# ---- Summary ---
# ----------------
# ----------------------------------------
# The testsuite is from
# Technical Report on C++ Performance
# ISO/IEC PDTR 18015; Date: 2003-08-11; WG21 N1487=03-0070
# Appendix D: Timing Code
# SubAppendix D5. Measuring the Cost of Synchronized I/O
# ----------------------------------------
# * http://www.open-std.org/jtc1/sc22/WG21/docs/PDTR18015.pdf
# * http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1487.pdf
#---------------------------------------------------------------------
# Resource Name : CPU-time used
# Resource Cost Unit : clock
# Resource State Unit : clock
#=====================================================================
# Total repetitions : 100
# Performance metrics : clock / 100 repetitions
#=====================================================================
Measurement has been performed for the following optimization levels:
* No optimization
Total 100 repetitions
Performance = milliseconds per 100 repetitions
Here are summary results of the measurement.
--------------------------------------------
================================================
No optimization
------------------------------------------------
Full raw run log: http://groups-beta.google.com/group/log-files/msg/16d60f0b46fe5c9b
================================================
========================================================================
| Quote: | | Size |
Testsuite |-----------------------|
| 100 : 1000 : 10000 |
----------------------------------------------------------------------|
integers to stdio | 33 : 290 : 4479 |
hex integers to stdio | 40 : 347 : 3745 |
integers to standard IO (sync = false) | 270 : 2747 : 28768 |
hex integers to standard IO (sync = false) | 267 : 2704 : 27869 |
integers to standard IO (sync = true) | 270 : 2750 : 28334 |
hex integers to standard IO (sync = true) | 267 : 2710 : 27876 |
======================================================================== |
--
Alex Vinokur
email: alex DOT vinokur AT gmail DOT com
http://mathforum.org/library/view/10978.html
http://sourceforge.net/users/alexvn
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
|
|
| Back to top |
|
 |
Alberto Barbati Guest
|
Posted: Fri Dec 31, 2004 1:22 pm Post subject: Re: why is my iostream program so much slower than equivalen |
|
|
Alex Vinokur wrote:
| Quote: |
Here is some performance test related to the issue.
|
Did you use the code previously posted on this thread or a different code?
| Quote: |
Measurement has been performed for the following optimization levels:
* No optimization
|
You should try with optimization enabled also. The C stdio library is
likely to be optimized regardless of the project settings as it is
usually linked in as a pre-compiled library. On the other hand, a
significant part of the C++ iostream library is written using templates
which are effectively re-compiled in each project, so the level of
optimization of that part is likely to depend on the project settings.
Your comparison results are thus likely to be unfair.
Alberto
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|