|
I don't know how....I'm thinking the way ( and after I'll can say if the thing is good or not). But what I want find is a solution that the CLR can manages objects on the stack instead on the heap. I know this hard/strange question....but will it be possible? I'm finding an rough idea (what'll do the loader...., the pointer, the Jit)...any idea?
|
|
|
|
|
A stack is a data structure where things get added on one end, in a particular
order, and get removed, at the same end, in reverse order. That is the only thing
a stack is capable of (and it is very good at that).
you can't allocate reference types on a stack: the stack is used for
keeping track of program flow (calling and returning from methods) and for
local value types (which live as long as the method is executing).
If you return from a method, the stack is reset to the state it had when
you entered the method, that is the only thing acceptable to the calling method.
Ref types must live from construction (with new) until death (last reference
got lost); they don't die in reverse order of construction, and they get
constructed and die independent of program flow, hence there is no room
whatsoever to allocate ref types on the stack.
In summary: a system can not allocate ref types on the stack.
It needs separate memory to hold them, such memory is called a heap.
Actually ref types come from a couple of heaps, depending on the size of
the objects (small objects get shuffled around to avoid heap fragmentation,
large objects come from the large object heap, which is not reshuffled,
and may get exhausted due to fragmentation, something Micro$oft tries not
to focus your attention on).
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
That was an excellent answer right up until
Luc Pattyn wrote: Micro$oft
I hate that. Microsoft is a business. It is their job to make money and they happen to be very good at it.
|
|
|
|
|
Hi Colin,
Colin Angus Mackay wrote: Microsoft is a business. It is their job to make money and they happen to be very good at it.
I agree.
But I would like them to be a little better at offering things that make life easy
for programmers/developers, even if that would (seem to) take away one percent
of their profits.
Why are line numbers not displayed by default in Visual source files ?
Why does Windows show a silly error number when trying to run a .NET app on
a system that does not have (the right version of) .NET installed ?
Why don't they provide a full set of P/Invoke prototypes for all Win32 structures
and functions ?
Why does it take a network guru to set up a wireless network ? (are there any
non-technical people who get any level of security?)
Why do we have to view or enter stuff in 200*200 pixel windows and dropdowns,
when the screen has over 1M pixel ?
Why does most MSDN documentation on API stuff come without examples ?
Why don't they provide a list of probable causes, in non-academic terms, for
the most frequently occuring error situations ?
...
the list is infinite.
In general, is it so hard to listen to users and to read forums (like this one)
and learn from it, as to how the user's experience could be improved (rather than
just adding features, complexity and sometimes mystery). In my opinion most of
what goes on on these forums should be made redundant by step-by-step improvements
to the MS products and their documentation.
Conclusion: as long as dollars/euros/yens seem to be more important than customers
and their little problems, I tend to occasionally replace an 's' by a '$'
Regards
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
Gosh! That's not what I see at all. Microsoft are very responsive for such a large company and they do try their best for the community. They are improving constantly, it just takes time. For instance, there are a lot more examples in MSDN than their used to be.
There are a lot of new and innovative things on the horizon which I am sure will address some of your concerns.
|
|
|
|
|
So, it's the OS that allocate space on the stack for the process?! If it's so, I think that can't exists a (new) CLR that manage stack..!? I understand that for my question, CLR would have to do the work of OS; so i would have to change OS too; is it that?
Then arise one question on C#:
<br />
namespace Simple {<br />
class Program {<br />
static void Main(string[] args)<br />
{<br />
Console.WriteLine("that's the program");<br />
int a = 0;<br />
myClass mc = new myClass(); <br />
}<br />
}<br />
}<br />
I read that every value type (int32, enumeration, and other) are on the stack; but if they're inside a class declaration they take part of object and then go on the heap. In c# even main is inside a class (in my example " Program"); with this knowledge, it seems to me that evey things goes on the heap. Could you explain to me what go on the stack ? (use my example code, please)
Thanks...
|
|
|
|
|
I already told you what goes on the stack, and why the other things don't fit
on a stack. Things are the way they must be. For me the subject is closed.
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
No - let him implement the OS as well. That should be worth seeing.
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
OK, on one condition, Chris should start a separate forum for it, since I expect
a couple more discussion threads before the new OS is up and running...
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
Seems fair. He'll need a cool name for the project though. How about calling it "Pillock" or "Idiot"? That way we can ask people "Are you running Idiot?"
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
Hmm, learning a least one new word every day now. I like that.
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
MarKus0 wrote: So, it's the OS that allocate space on the stack for the process?!
No, not entirely. The processor has a stack the is allocated on a per-thread basis. Ever here of the Stack Pointer? Read[^]
It's the processor that's stopping you from doing what you want, not the .NET Framework or the O/S.
|
|
|
|
|
Dave - don't let facts get in the way of our mocking him.
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
My bad! :-> Please, proceed. I love a good show!
|
|
|
|
|
Dave Kreskowiak wrote: It's the processor that's stopping you from doing what you want, not the .NET Framework or the O/S.
IMO that is not entirely true; this is how I see it:
- most processors don't support heaps at all, yet lots of OS need heaps, so these
get implemented by software;
- stack structures can be implemented by software (e.g. the Stack class in .NET);
- there (still) are processors that don't provide hardware support for a stack,
yet a stack-based language (and OS) can made to run on them; when they have say
a shadow register for PC (into which the PC gets copied upon CALL or INT), each
function must start saving the shadow PC on a software stack;
- alternatively, if the CPU offers stack support (i.e. pushes the PC to a memory
location thru a pointing register) and you don't like the way it works, you can
undo it by software, and keep track of program flow in some other way.
- IIRC Intel's IA432 architecture did not have real stack support, instead it
allocated nodes (on the heap!) that got linked back and forth, resulting in
a distributed structure with stack behavior.
So I would say most OS really want to have hardware supporting a stack, and
hence most chip vendors provide exactly that, but either one can choose to do it
differently (which they seldom do).
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
I was speaking from the Intel/AMD perspective, which does support execution stacks.
Luc Pattyn wrote: - alternatively, if the CPU offers stack support (i.e. pushes the PC to a memory
location thru a pointing register) and you don't like the way it works, you can
undo it by software, and keep track of program flow in some other way.
I don't think he's up to the task of re-writing the O/S just yet!
|
|
|
|
|
Guys please answer this..Why value type instances are int stack?
M.Sendilkumar
|
|
|
|
|
I thought we answered this already.
Because access to it is much faster than allocating memory on the heap for it, handling the pointer math, copying the values back and forth between memory and a register. On the stack, all that happens to get/set the value is the stack pointer is moved.
|
|
|
|
|
MarKus0 wrote: but will it be possible?
No it won't. For the reasons Luc gave.
This is a fundamental principle of the way stacks work in computer programs, and it has been pretty much since the first tiem a computer programmer created a subroutine.
|
|
|
|
|
Hi, I found that code around. Is it possible with managed c++ extension create oblects on the stack????
Does anyone explaim me that? Is this below true? In positive case, what does CLR do to allocate bHeap and bStack (I mean the difference)?
thanks
<br />
value class classB {<br />
private:<br />
int value;<br />
<br />
};<br />
classeB^ bHeap = gcnew classeB();
classeB bStack;
|
|
|
|
|
MarKus0 wrote: what does CLR do to allocate bHeap and bStack (I mean the difference)?
Why not see for yourself. Why not compile the code then look at the compiled IL through ILDASM (comes with the .NET SDK) or with a tool such as Lutz Roeder's Reflector (a quick google away)
|
|
|
|
|
Hi.
We have donwloaded and installed SharePoint 2007 (MOSS) evaluation version on one of our servers.
I have a DEV machine with .NET Framework 2.0 and VS 2005 on it. What kind of other tools do I need in order to start creating cutom web parts for SharePoint 2007? Right now my VS 2005 doesn't have an option of Web Part project. I know I need to download something but not sure what and in what order. My DEV machine doesn't have SharePoint on it.
Thank you,
|
|
|
|
|
I worked on sharepoint nearly 2 yrs back for some time , what I can recall from that is " we need to add a DLL provided by Sharepoint.
|
|
|
|
|
Are you talking about Microsoft.SharePoint.Portal.dll?
Here are the steps I've done so far.
1. We have a server with MOSS (SharePoint 2007) installed.
2. I have a DEV machine with VS 2005 and .NET framework (2.0 and 3.0)
3. I've installed Microsoft SharePoint Services 3.0 on that DEV machine.
4. I've installed Visual Studio SharePoint Extensions, which gave me these nice icons to create WebPart and other SharePoint projects.
Is this the right way to go?
After all this installations I still didn't have Microsoft.SharePoint.Portal.dll on DEV machine so I've copied it from server where MOSS installed and added to the ISAPI directory where all other dlls are.
After doing that I was able to create webparts that I've wanted and drop them into bin directory on the server. Of course I've run into some security issues, which I've solved by modifying trust level in the web.config from minimum to medium. I know that there's a way to attach config file for each part you create I just don't know how to do that yet. If you have any references and/or examples, or maybe even books I can read please send them my way.
I really appreciate your response.
|
|
|
|
|
good that you were able to create the webparts. I think you get a lot of help material on MSDN.
amit
|
|
|
|
|