Greetings!!
Currently i am learning C from K&R.I have DOS & Linux in my
system.When i used sizeof() keyword to compute the size of integer , it
shows different results in DOS and Linux.In DOS it shows integer
occupies 2 bytes , but in Linux it shows 4 bytes.Is sizeof operator
"really" shows the machine data or register size ?
Please help
me!!
Nov 14 '05
37 1820
Paul Mesken wrote: Jack Klein <ja*******@spam cop.net> wrote: Caring about whether or not there is a performance penalty for one thing or another thing is off-topic here, is a micro optimization, and has nothing to do with the C language, which does not specify anything at all about the speed or efficiency of anything. Nownownow Jack, that's not the right attitude for a C programmer ;-)
But it's the right attitude for clc. You can introduce specific
architectures if you want to cite examples of how different
implementations will yield different results. But readers should
not be encouraged to think of C in terms writing code for one (or
two) specific architectures.
Don't you think our non-Assembly programming C brothers/sisters have a right to know that a division is typically slower than an addition, for example?
Yes, but I don't want to see discussions of say opcodes and actual
cycle/latency times on an x86.
Or is such a statement off topic here because the Standard doesn't mention this? (even though it is true in the real world).
The critical point is that what the standard(s) do say in terms of
language semantics are the priority.
... A lot of decisions made for the implementation of the compiler make more sense (like the difference in sizeof(int) the OP experienced) when the underlying computer architecture (which the compiler targets) is explained.
CLC is not here to discuss implementations and their internals.
There are plenty of other groups that discus that. CLC is here to
discus C programming, i.e. writing C code that is portable to all
implementations .
It is a natural human (or at least programmer) tendancy to want to
disect C code in terms of disassemblies and working out what the
compiler actually does with source code. However, it has been my
long experience that this only coerces students of C (and other
languages) into writing architecture specific code. The consequences
of this attitude can and often does come back to haunt students.
Unlearning acquired bad habits is difficult and time consuming.
Of course, we could deny the fact that programs written in C are actually meant to run on a computer.
Who is denying this? C's main goal was to implement Unix and
associated tools. You don't get much more practical than that.
But this would reduce discussion to a completely academical one, interesting only to mathematicians and linguists and devoid of practical experience.
CLC is an esoteric group in that it does focus exclusively on the
application of the language definition, without trying to motivate
readers towards specific architecture specific trends.
How does it harm students to understand the language abstraction?
We would just be quoting the Standard all the time.
And what is wrong with that? Too few C programmers sit down to
actually analyse the language they are employing. This just
promotes a 'near enough is good enough' approach. With a language
like C, this is a dangerous attitude.
Time and time again you will see people questioning why certain
code works on one machine but not on another. The reason is invariably
because they have been using (and been encouraged to use) Machine-X C,
rather than learn the portable aspects of the core C language itself.
If you want language efficiencies on specific architectures, then
there are no shortage of groups that can help. On the other hand,
discussing strictly conforming code has pretty much only one group,
namely clc (and language/moderated) derivatives.
--
Peter
>All C objects are a multiple of sizeof(char), which is defined to be one. Usually char is 8 bits, but not always.
Can you please tell where/what are the diffrent sizes of char?I am new
to C and I haven't seen any compiler where size of char is diffrent
from 8 .Please specify.
"Prashant Mahajan" <mr************ ***@gmail.com> writes: All C objects are a multiple of sizeof(char), which is defined to be one. Usually char is 8 bits, but not always.
Can you please tell where/what are the diffrent sizes of char?I am new to C and I haven't seen any compiler where size of char is diffrent from 8 .Please specify.
I've never heard of a hosted implementation of C with CHAR_BIT != 8.
The need to exchange octet-oriented data with other systems strongly
encourages implementers to use 8-bit chars even on systems that can't
directly access 8-bit quantities. (Search for references to "Cray
vector" in this newsgroup for one example.)
Values of CHAR_BIT other than 8 are most common on DSPs (Digital
Signal Processors). These are special-purpose systems that process
data 16 or 32 bits at a time.
Some older systems have had 9-bit bytes, or word sizes such as 36 or
60 bits, but most or all of them probably predate the ANSI C standard;
powers of two have pretty much taken over in recent decades.
--
Keith Thompson (The_Other_Keit h) ks***@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
CBFalconer <cb********@yah oo.com> writes: Prashant Mahajan wrote: All C objects are a multiple of sizeof(char), which is defined to be one. Usually char is 8 bits, but not always. ^^^^^^^ ^^^^^^^^^
Can you please tell where/what are the diffrent sizes of char?I am new to C and I haven't seen any compiler where size of char is diffrent from 8 .Please specify.
He did. There is no system where sizeof(char) is not one.
As long as we're being pedantic, why do you assume that the phrase
"size of" refers to the C "sizeof" operator?
--
Keith Thompson (The_Other_Keit h) ks***@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
On Mon, 30 May 2005 02:04:29 +0200, in comp.lang.c , Paul Mesken
<us*****@eurone t.nl> wrote: On Sun, 29 May 2005 18:31:15 -0500, Jack Klein <ja*******@spam cop.net> wrote:
Caring about whether or not there is a performance penalty for one thing or another thing is off-topic here, is a micro optimizatio n, and has nothing to do with the C language, which does not specify anything at all about the speed or efficiency of anything. Nownownow Jack, that's not the right attitude for a C programmer ;-)
Smiley noted, but unless you're planning becoming a troll, you need to
understand the topic of this group a tad better.
Don't you think our non-Assembly programming C brothers/sisters
Whatever. This is not comp.lang.x86.a ssembler or whatever.
Or is such a statement off topic here because the Standard doesn't mention this?
Yes.
(even though it is true in the real world).
And you have proof positive of this for all concievable hardware?
Including specialist math hardware designed to do divisions
ultra-fast?
If speed and efficiency are of no concern then there are better languages than C. C is not the only portable language (how about Java?).
Its either an island or a coffee. The latter is semitopical here, the
latter not.
(snip rest of foolish troll)
--
Mark McIntyre
CLC FAQ <http://www.eskimo.com/~scs/C-faq/top.html>
CLC readme: <http://www.ungerhu.com/jxh/clc.welcome.txt >
----== Posted via Newsfeeds.Com - Unlimited-Uncensored-Secure Usenet News==---- http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups
----= East and West-Coast Server Farms - Total Privacy via Encryption =----
"Paul Mesken" <us*****@eurone t.nl> wrote Caring about whether or not there is a performance penalty for one thing or another thing is off-topic here, is a micro optimization, and has nothing to do with the C language, which does not specify anything at all about the speed or efficiency of anything. Nownownow Jack, that's not the right attitude for a C programmer ;-)
Don't you think our non-Assembly programming C brothers/sisters have a right to know that a division is typically slower than an addition, for example? Or is such a statement off topic here because the Standard doesn't mention this? (even though it is true in the real world).
I used to spend a lot of time back cracking multiplications
( replacing x *= 9 with x = (x << 3) + x; )
Now I hardly ever do. The real world changes. If speed and efficiency are of no concern then there are better languages than C. C is not the only portable language (how about Java?).
Efficiency is certainly a reason for using C. It is not the only one. When
the C++ standard template library came out I saw some figures that made a
very convincing case that the classes were more efficient than corresponding
C constructs. I did seriously consider doing everything in STL, but decided
against it, largely because the syntax made it too difficult to integrate
modules. Isn't it so that C is a "Language of Choice" because it's "close to the metal"? Computer architecture _is_ that "metal". A lot of decisions made for the implementation of the compiler make more sense (like the difference in sizeof(int) the OP experienced) when the underlying computer architecture (which the compiler targets) is explained.
You do need to understand how a computer works to be a good programmer,
irrespective of language. However you shouldn't have to understand what your
particular architecure is. I have a UNIX box to run heavy-duty programs on.
I don't actually know some basic things such as how many bits a pointer
takes up, what the processor is, what the size of long is. I don't need to.
I just give it C programs and it spits back the results. Of course, we could deny the fact that programs written in C are actually meant to run on a computer. But this would reduce discussion to a completely academical one, interesting only to mathematicians and linguists and devoid of practical experience. We would just be quoting the Standard all the time.
You need both theoretical and practical approaches. It is nice to know that
a ZX81 can emulate a Cray given a large enough supply of tapes, though no
one would ever try to do this. In reality the whole world runs on Microsoft
products, but it is nice to pretend sometimes that Mr Gates is an obscure
software vendor whose operating system we have only vaguely heard of. Why?
Not because every single regular on this ng hasn't written a program to run
under MS at some stage, but because you need to separate the language from
the implementation to improve the structure of your programs.
Thank you for all your replies!!!
Malcolm wrote: "Paul Mesken" <us*****@eurone t.nl> wrote Caring about whether or not there is a performance penalty for one thing or another thing is off-topic here, is a micro optimization, and has nothing to do with the C language, which does not specify anything at all about the speed or efficiency of anything.
Nownownow Jack, that's not the right attitude for a C programmer ;-)
Don't you think our non-Assembly programming C brothers/sisters have a right to know that a division is typically slower than an addition, for example? Or is such a statement off topic here because the Standard doesn't mention this? (even though it is true in the real world).
I used to spend a lot of time back cracking multiplications ( replacing x *= 9 with x = (x << 3) + x; ) Now I hardly ever do. The real world changes. If speed and efficiency are of no concern then there are better languages than C. C is not the only portable language (how about Java?).
Efficiency is certainly a reason for using C. It is not the only one. When the C++ standard template library came out I saw some figures that made a very convincing case that the classes were more efficient than corresponding C constructs. I did seriously consider doing everything in STL, but decided against it, largely because the syntax made it too difficult to integrate modules. Isn't it so that C is a "Language of Choice" because it's "close to the metal"? Computer architecture _is_ that "metal". A lot of decisions made for the implementation of the compiler make more sense (like the difference in sizeof(int) the OP experienced) when the underlying computer architecture (which the compiler targets) is explained.
You do need to understand how a computer works to be a good programmer, irrespective of language. However you shouldn't have to understand what your particular architecure is. I have a UNIX box to run heavy-duty programs on. I don't actually know some basic things such as how many bits a pointer takes up, what the processor is, what the size of long is. I don't need to. I just give it C programs and it spits back the results. Of course, we could deny the fact that programs written in C are actually meant to run on a computer. But this would reduce discussion to a completely academical one, interesting only to mathematicians and linguists and devoid of practical experience. We would just be quoting the Standard all the time.
You need both theoretical and practical approaches. It is nice to know that a ZX81 can emulate a Cray given a large enough supply of tapes, though no one would ever try to do this. In reality the whole world runs on Microsoft products, but it is nice to pretend sometimes that Mr Gates is an obscure software vendor whose operating system we have only vaguely heard of. Why? Not because every single regular on this ng hasn't written a program to run under MS at some stage, but because you need to separate the language from the implementation to improve the structure of your programs.
On Mon, 30 May 2005 15:12:45 +0000 (UTC), "Malcolm"
<re*******@btin ternet.com> wrote: I used to spend a lot of time back cracking multiplications ( replacing x *= 9 with x = (x << 3) + x; ) Now I hardly ever do. The real world changes.
That's a good point. Multiplications aren't as slow as they once used
to be (although your example is still faster than the multiplication
on a P3 or P4, but that's besides the point).
In general, I think that a single operation should not be replaced by
two or more operations which just happen to be faster at the
_present_. It also tends to hurt readability.
On the other hand, replacing one operation with another one can be
quite helpfull.
For example :
a = b % 16;
a = b & 15;
(for some unsigned int b)
Of course, the compiler should optimize such simple constructs but I
have too much experience with compilers that don't do obvious
optimizations to have any trust in them :-)
I think it's perfectly safe to assume that multiplications , divisions
and modulus operations will never be faster than the boolean
operations (and, or, not), additions and subtractions.
Having said that : I believe that readability (and, thus,
maintainability ) is the most important factor for the bulk of the
code. If a program needs optimization for speed (and that optimization
is needed in the code, not in the hardware) then, typically, only a
very small part of the program needs that optimization (the "90% of
the time, 10% of the code is executed" thing :-)
On Mon, 30 May 2005 12:13:03 +0100, Mark McIntyre
<ma**********@s pamcop.net> wrote: And you have proof positive of this for all concievable hardware? Including specialist math hardware designed to do divisions ultra-fast?
Let's do it somewhat simpler : _you_ come up with a _single_ piece of
hardware that does divisions quicker than additions.
I would be mightily impressed. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Sunil Menon |
last post by:
Dear All,
A class having no member variables and only a method sizeof(object)
will return 1byte in ANSI and two bytes in Unicode.
I have the answer for this of how in works in ANSI. But I don't
know it returns two bytes in UniCode.
Please help...
For ANSI:
In ISO/ANSI C++ Standard, 5.3.3 § 1, it stays: "The sizeof operator
yields the number of bytes in the object representation of its
|
by: Xiangliang Meng |
last post by:
Hi, all.
What will we get from sizeof(a class without data members and virtual
functions)?
For example:
class abnormity {
public:
string name() { return "abnormity"; }
|
by: Martin Pohlack |
last post by:
Hi,
I have a funtion which shall compute the amount for a later malloc. In
this function I need the sizes of some struct members without having an
instance or pointer of the struct.
As "sizeof(int)" is legal I assumed "sizeof(struct x.y)" to be legal
too. But is is not:
#include <dirent.h>
|
by: M Welinder |
last post by:
This doesn't work with any C compiler that I can find. They all report a
syntax error:
printf ("%d\n", (int)sizeof (char)(char)2);
Now the question is "why?" "sizeof" and "(char)" have identical precedence
and right-to-left parsing, so why isn't the above equivalent to
printf ("%d\n", (int)sizeof ((char)(char)2));
|
by: dam_fool_2003 |
last post by:
#include<stdio.h>
int main(void)
{
unsigned int a=20,b=50, c = sizeof b+a;
printf("%d\n",c);
return 0;
}
out put:
24
| |
by: Christopher C. Stacy |
last post by:
Some people say sizeof(type) and other say sizeof(variable).
Why?
|
by: junky_fellow |
last post by:
Consider the following piece of code:
#include <stddef.h>
int main (void)
{
int i, j=1;
char c;
printf("\nsize =%lu\n", sizeof(i+j));
|
by: pnreddy1976 |
last post by:
Hi,
How can we write a function, which functionality is similar to sizeof
function
any one send me source code
Reddy
|
by: Abhishek Srivastava |
last post by:
Hi,
Somebody recently asked me to implement the sizeof operator, i.e. to
write a function that accepts a parameter of any type, and without
using the sizeof operator, should be able to return the size occupied
by that datatype in memory in bytes. Thanks :)
Abhishek Srivastava
|
by: Francois Grieu |
last post by:
Does this reliably cause a compile-time error
when int is not 4 bytes ?
enum { int_size_checked = 1/(sizeof(int)==4) };
Any better way to check the value of an expression
involving sizeof before runtime ? I also have:
{
void check_foo_size(void);
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
| |
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one.
At the time of converting from word file to html my equations which are in the word document file was convert into image.
Globals.ThisAddIn.Application.ActiveDocument.Select();...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
| |
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |