当前位置:   iOS > 正文

为什么动态创建的对象与对象的大小相差两倍?

c++,heap-memory,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

我编写了代码来创建动态创建对象的链接列表:

#include 
using namespace std;

struct X {
  int i;
  X* x;
};

void birth(X* head, int quant){
  X* x = head;
  for(int i=0;ii = i+1;
    x->x = new X;
    x = x->x;
  }
  x->i = quant;
  x->x = 0;
}

void kill(X* x){
  X* next;
  while(1==1){
    cout << x->i << endl;
    cout << (long)x << endl;
    next = x->x;
    delete x;
    if(next == 0){
      break;
    } else {
      x = next;
    }
  }
}

int main(){
  cout << (long)sizeof(X) << endl;
  X* x = new X;
  birth(x, 10);
  kill(x);
  return 0;
}

这似乎是有效的,除了当你查看每个对象的地址时......

16
1
38768656
2
38768688
3
38768720
4
38768752
5
38768784
6
38768816
7
38768848
8
38768880
9
38768912
10
38768944

尽管X的大小仅为16位,但它们似乎相隔32位.我是如何创建对象的,或者这只是动态分配如何工作的结果?



1> Andrew Henle..:

原因在7.22.3 C标准的内存管理功能中说明:

的顺序和连续调用到所分配的存储的邻接aligned_alloc,calloc,malloc,和realloc功能是不确定的.如果分配成功,则返回指针,以便可以将其分配给指向具有基本对齐要求的任何类型对象的指针,然后用于在分配的空间中访问此类对象或此类对象的数组

由于存储器必须"适当地对齐,以便可以将其分配给指向具有基本对齐要求的任何类型对象的指针",因此malloc 等人返回的存储器倾向于从不同的平台相关倍数开始 - 通常为8或16 - 边界.

而且因为new通常用malloc,这也适用于C++ new.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/iOS/detail/8729
推荐阅读
  • 如何解决《iOS控制音量》经验,为你挑选了0个好方法。iphone,objective-c,ipad,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前... [详细]

  • 如何解决《c++11使用std::fill来填充2D动态分配的数组》经验,为你挑选了1个好方法。c++,arrays,dynamic-memory-allocation,c++11,ios,go,DevBox,在线流程图,编程,编程问答,程... [详细]

  • 如何解决《在AppStore和Enterprise上分发iOSApp》经验,为你挑选了0个好方法。xcode,ad-hoc-distribution,ios,enterprise-distribution,ios-enterprise,De... [详细]

  • 如何解决《从Url创建工作的UIPrinter对象,以进行无对话打印》经验,为你挑选了0个好方法。printing,ios,xamarin,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,u... [详细]

  • 如何解决《通过索引访问数组对象会导致-[_NSFaultingMutableSetobjectAtIndex:]:》经验,为你挑选了1个好方法。core-data,ios,uicollectionview,git,DevBox,在线流程图,... [详细]

  • 如何解决《通过HTTP测试服务工作者的选项》经验,为你挑选了3个好方法。javascript,google-chrome,service-worker,progressive-web-apps,https,chrome,服务器,firefo... [详细]

  • 如何解决《没有互联网连接的iOS9TrustEnterpriseDeveloper》经验,为你挑选了0个好方法。windows,iphone,enterprise,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工... [详细]

  • 如何解决《如何使用UserDefaults保存UIColor?》经验,为你挑选了1个好方法。nsuserdefaults,nskeyedarchiver,ios,sprite-kit,swift,DevBox,在线流程图,编程,编程问答,程... [详细]

  • 如何解决《如何制作一个快速的类对象数组的深层副本》经验,为你挑选了1个好方法。ios,swift,容器,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发... [详细]

  • 如何解决《快速NSTimer在背景中》经验,为你挑选了1个好方法。background,nstimer,ios,swift,go,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间... [详细]

  • 如何解决《如何在iOS中创建AppDelegate共享实例?》经验,为你挑选了1个好方法。iphone,objective-c,ios,appdelegate,swift,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工... [详细]

  • 如何解决《使用Swift在Xcode7.1.1下"使用优化编译了Realm"》经验,为你挑选了1个好方法。xcode,realm,ios,swift,go,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开... [详细]

  • 如何解决《GooglePlacesAPIFramework文件夹iOS中缺少某些类》经验,为你挑选了0个好方法。xcode,google-maps,objective-c,ios,google-places-api,DevBox,在线流程图... [详细]

  • 如何解决《限制Swift2中多个UITextField的长度》经验,为你挑选了1个好方法。uitextfield,ios,swift,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix... [详细]

  • 如何解决《无法找到匹配的元素请提交bug》经验,为你挑选了1个好方法。xcode,ui-testing,ios,xctest,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,... [详细]

  • 如何解决《使用CoreData时更新Spotlight搜索索引?》经验,为你挑选了1个好方法。core-data,ios,swift,corespotlight,css,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具... [详细]

  • 如何解决《检查Unity的互联网连接》经验,为你挑选了1个好方法。c#,android,internet-connection,unity3d,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二... [详细]

  • 如何解决《确保调用移动构造函数》经验,为你挑选了0个好方法。c++,move,move-semantics,c++11,go,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix... [详细]

  • 如何解决《尝试从getline分配字符时出现细分错误》经验,为你挑选了1个好方法。c++,getline,segmentation-fault,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二... [详细]

  • 如何解决《如何在派生类中重写模板类的静态方法》经验,为你挑选了1个好方法。c++,inheritance,static,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳... [详细]

相关标签
  

闽ICP备14008679号