zoukankan      html  css  js  c++  java
  • C++函数内存占用

    一个类的对象中是没有关于普通成员函数的指针的slot,只有成员变量还有虚表指针,类的成员函数的代码定义在PE文件的代码区,所以从程序加载时,就已经分配好了内存用于存放这些代码;代码运行时所需要的内存,比如栈、堆等等,则是代码运行时才分配的;对于某个类的所有对象来说,类成员函数只在内存中有一份拷贝,所有的对象都共享同一份成员函数的代码。同一个类的不同的对象之间的差异仅仅是通过成员变量来体现的。c++实现成员函数的时候实际上用到了一个技巧——this指针。this指针是当前调用成员函数的对象首地址,我们知道通过这个地址可以访问到对应对象的成员变量。那么成员函数如何区分this究竟指向哪个对象呢?技巧就在于,c++背后把成员函数当做普通函数一样调用,除了传入实际的参数外,还把所属对象的指针作为参数this传入,函数内部通过显示的或者隐含的方式访问对象成员。当然,这只是背后的事情,外面用起来就和你见到的一样,简单直观。

    一个很诡异的例子可以证明类函数与类实例无关:

    #include "stdafx.h"
    
    class CTest {
    public:
        void test() {
            printf("hello
    ");
        }
    };
    int main()
    {
        CTest* ptest = NULL;
        ptest->test();//输出 hello
        return 0;
    }

     如果用C#实现类似这面的代码则运行不通,抛出了异常:

        class CTest
        {
            public void test()
            {
                Console.WriteLine("hello");
            }
        }
        static void Main()
        {
            CTest ot = null;
            ot.test(); //运行时将抛出异常
        }
  • 相关阅读:
    SqlServer存储过程函数加解密[极有用]
    BMDThread控件动态创建多线程示例
    cxGrid右键自定义菜单
    越狱中Michael的一种疾病
    静态链表
    单行编辑框SelectText()
    开机得按F1
    jquery调用页面后台方法‏
    .net调用存储过程详解
    javascript兼容各种浏览器的异步请求
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/6029449.html
Copyright © 2011-2022 走看看