• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            asm, c, c++ are my all
            -- Core In Computer
            posts - 139,  comments - 123,  trackbacks - 0

            /********************************************\
            |????歡迎轉(zhuǎn)載, 但請保留作者姓名和原文鏈接, 祝您進步并共勉!???? |
            \********************************************/


            C++對象模型(8) - Chapter 3. The Semantics of Data
            ?

            作者: Jerry Cat
            時間: 2006/11/15
            鏈接:?
            http://m.shnenglu.com/jerysun0818/archive/2006/11/15/15185.html


            ;-----------------------------------------------------------------------
            ;Chapter 3. The Semantics of Data
            ;-----------------------------------------------------------------------
            Chapter 3. The Semantics of Data - 空類不空

            class X {};
            class Y : public virtual X {};
            class Z : public virtual X {};
            class A : public Y, public Z {};
            None of these classes contains any explicit data—any anything, in fact, except an inheritance
            relationship—so he apparently believed the size of each class should be 0. It wasn't,
            of course—not even the apparently benign class X:

            sizeof X yielded 1
            sizeof Y yielded 8
            sizeof Z yielded 8
            sizeof A yielded 12
            Let's look at each declaration in turn and see what's going on. An empty class, such as

            // sizeof X == 1
            class X {};
            in practice is never empty. Rather it has an associated size of 1 byte—a char member inserted
            by the compiler. This allows two objects of the class, such as

            X a, b;
            if ( &a == &b ) cerr << "yipes!" << endl;//to be allocated unique addresses in memory.哈!

            // sizeof Y == sizeof Z == 8
            class Y : public virtual X{};
            class Z : public virtual X{};
            On his machine, the size of both classes Y and Z is 8. This size, however, is partially machine dependent. It also depends in part on the compiler implementation being used. The given size of both class Y and class Z on any machine is the interplay of three factors:

            (1). Language support overhead. There is an associated overhead incurred in the language support of virtual base classes. Within the derived class, this overhead is reflected as some form of pointer, either to the virtual base class subobject or to an associated table within which either the address or offset to the virtual base class subobject is stored. On my correspondent's machine, the pointer is 4 bytes. (Virtual base classes are discussed in Section 3.4.)

            (2). Compiler optimization of recognized special cases. There is the 1 byte size of the virtual base class X subobject also present within Y (and Z). Traditionally, this is placed at the end of the "fixed" (that is, invariant) portion of the derived class. Some compilers now provide special support for an empty virtual base class (the paragraph following item 3 discusses this in more detail). Our correspondent's compiler, however, did not provide this special handling.

            (3). Alignment constraints. The size of class Y (and Z) at this point is 5 bytes. On most machines, aggregate structures have an alignment constraint so that they can be efficiently loaded from and stored to memory. On my correspondent's machine, alignment of an aggregate is on a 4-byte boundary. So class Y (and Z) requires 3 bytes of padding. The result is a final size of 8.

            The C++ object model representation for nonstatic data members optimizes for space and access time (and to preserve compatibility with the C language layout of the C struct) by storing the members directly within each class object. This is also true for the inherited nonstatic data members of both virtual and nonvirtual base classes, although the ordering of their layout is left undefined. Static data members are maintained within the global data segment of the program and do not affect the size of individual class objects.(靜態(tài)數(shù)據(jù)成員被放在全局數(shù)據(jù)段, 并不影響單個類的大小)
            ?
            Only one instance of a static data member of a class exists within a program regardless of the number of times that class is an object of direct or indirect derivation. (The static data members of a template class behave slightly differently. See Section 7.1 for a discussion.)模板類的靜態(tài)數(shù)據(jù)成語有所不同

            類的大小讓你吃驚地"大"的原因來源于2方面:
            (1). Additional data members added by the compilation system to support some language functionality (primarily the virtuals)

            (2). Alignment requirements on the data members and data structures as a whole

            posted on 2006-11-15 16:55 Jerry Cat 閱讀(547) 評論(0)  編輯 收藏 引用

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(7)

            隨筆檔案

            最新隨筆

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲人成无码久久电影网站| 久久久久无码精品| 欧美亚洲另类久久综合婷婷| 国产∨亚洲V天堂无码久久久 | 狠狠色丁香婷婷久久综合五月| 久久最新精品国产| 久久精品成人免费网站| …久久精品99久久香蕉国产| 激情伊人五月天久久综合| 久久99热只有频精品8| 久久99国产精品尤物| 久久综合精品国产二区无码| 久久精品aⅴ无码中文字字幕不卡| 中文字幕人妻色偷偷久久| 欧美大香线蕉线伊人久久| 日韩久久久久久中文人妻| 久久66热人妻偷产精品9| WWW婷婷AV久久久影片| 久久精品国产99国产电影网 | 99久久精品费精品国产| 精品国产91久久久久久久a| 久久精品成人免费国产片小草| 久久久久久噜噜精品免费直播 | 久久99这里只有精品国产| 2021国内久久精品| 99久久国语露脸精品国产| 国产精品亚洲美女久久久| 欧美成人免费观看久久| 久久精品无码午夜福利理论片| 91久久精品国产91性色也| 人妻丰满?V无码久久不卡| 日韩精品久久无码人妻中文字幕 | 免费一级欧美大片久久网| 久久精品国产清自在天天线| 国产产无码乱码精品久久鸭 | 秋霞久久国产精品电影院| 久久久久亚洲AV无码去区首| 午夜精品久久久久久久久| 久久影院午夜理论片无码 | 久久本道久久综合伊人| 亚洲伊人久久大香线蕉综合图片|