• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
Triad_prague

What would RAII look like in assembly?

8 posts in this topic

Hi, I know that when a variable comes into existence its constructor will be called, and its destructor will be called upon exiting scope, I just wonder what those processes look like in assembly? I've been thinking like crazy!!
0

Share this post


Link to post
Share on other sites
Do you mean how does the assembly look like that the compiler produces? Then you can simply look at it since pretty much any compiler can output assembly.

Or do you mean what it looks like when you are actually writing assembly? In that case there is the issue that assembly doesn't really know types to begin with, also there are no constructors in the "language", whether you initialise data or not is up to you. You just put "stuff" into registers and the instructions you use it with decide how it is interpreted.
1

Share this post


Link to post
Share on other sites
[quote name='Triad_prague' timestamp='1325288543' post='4898291']
Hi, I know that when a variable comes into existence its constructor will be called, and its destructor will be called upon exiting scope, I just wonder what those processes look like in assembly? I've been thinking like crazy!!
[/quote]

It looks like a 'call' or 'branch' instruction to call the constructor at the beginning of scope, and another call to the destructor at the end of the scope. They're just functions.

Of course, there may be optimizations at play that inline the constructor or destructor, so you might not see an actual call/branch/whatever instruction
1

Share this post


Link to post
Share on other sites
Using MSVC, this code:


[CODE]
int main()
{
MyClass c( 12.0f );
std::printf("Hello\n");
}[/CODE]

Looks like this in x86 asm:

[CODE]
00CE1260 push ebp
00CE1261 mov ebp,esp
00CE1263 sub esp,44h
00CE1266 push ebx
00CE1267 push esi
00CE1268 push edi
00CE1269 push ecx
00CE126A fld dword ptr [__real@41400000 (0CE4838h)]
00CE1270 fstp dword ptr [esp]
00CE1273 lea ecx,[c]
00CE1276 call MyClass::MyClass (0CE10C3h)
00CE127B push offset string "Hello\n" (0CE4830h)
00CE1280 call dword ptr [__imp__printf (0CE7238h)]
00CE1286 add esp,4
00CE1289 lea ecx,[c]
00CE128C call MyClass::~MyClass (0CE100Fh)
00CE1291 xor eax,eax
00CE1293 pop edi
00CE1294 pop esi
00CE1295 pop ebx
00CE1296 mov esp,ebp
00CE1298 pop ebp
00CE1299 ret
[/CODE]

You can see the call to constructor and destructor at 00CE1276 and 00CE128C
1

Share this post


Link to post
Share on other sites
Whoa! btw rdragon1, what tools do you use to generate assembly code from C++ code? I mean what version of MSVC? that's cool. Btw thanks for the response tho. I really need to know what it will look like if the code is like this:

[CODE]
void test()
{
ClassA a; //a's ctor called
if(1)
{
ClassB b; //b's ctor called
return;
}
//after this a's dtor will be called
}
[/CODE]

I wonder where a's destructor will be called since there's a 'return' before 'a' goes out of scope....
0

Share this post


Link to post
Share on other sites
MSVC will output assembly for you if you use the /FA family of switches. It's been there since at least MSVC 6.
1

Share this post


Link to post
Share on other sites
I just ran the program in the debugger and switched to the disassembly window.

For your other question, the destructor will be called whenever the object goes out of scope, so the compiler will add another call to the destructor just before that other return.
1

Share this post


Link to post
Share on other sites
Okay, thanks!! I think I started to get the hang of this [img]http://public.gamedev.net//public/style_emoticons/default/laugh.png[/img]
0

Share this post


Link to post
Share on other sites
And when you turn optimizations on, mostly all simple constructors and destructors gets inlined and optimized away entirely.
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0