堆栈分配对象的成员存储位置
来源:互联网 发布:和少年班类似的网络剧 编辑:程序博客网 时间:2024/06/06 01:20
栈上创建的临时对象及其成员可以确定存储在栈上
但是如果在堆上面手动分配一个对象,那么这个对象的成员究竟存储在内存中的什么位置?
分别创建一个栈上分配的临时结构体对象和一个堆上手动分配的结构体对象,打印存储位置。
#include <stdio.h>#include <stdlib.h>typedef struct _MemInfo { int value; int *ptr; char sarry[100]; char *parry;}MemInfo;void printmem(MemInfo *pmem){ printf("&pmem = %p,\t pmem = %p \ \n&value = %p \ \n&ptr = %p,\t ptr = %p \ \n&sarry = %p,\t sarry = %p \ \n&parry = %p,\t parry = %p \n", &pmem, pmem, &(pmem->value), &(pmem->ptr), pmem->ptr, &(pmem->sarry), pmem->sarry, &(pmem->parry), pmem->parry);}int main(){ printf("\n==================栈分配MemInfo======================start\n"); MemInfo meminfo; meminfo.ptr = new int; meminfo.parry = new char [100]; printmem(&meminfo); delete meminfo.ptr; delete [] meminfo.parry; printf("==================栈分配MemInfo======================over\n"); printf("\n==================堆分配MemInfo======================start\n"); MemInfo *pmem = new MemInfo; pmem->ptr = new int; pmem->parry = new char[100]; printmem(pmem); delete pmem->ptr; delete [] pmem->parry; delete pmem; printf("==================堆分配MemInfo======================over\n");}
linux上内存结构从低到高分别是:代码段、数据段、BSS段、堆、栈。上图可以看出0x7ff开始的较大地址是栈地址,而其它较小的地址时堆上的地址。
结果:
从结果可以看出堆分配的对象除了该对象的指针实在栈上,其所有成员的地址都是在堆上的。
因此在堆上分配了一个对象,则该对象的成员也是存储在堆中的。
阅读全文
0 0
- 堆栈分配对象的成员存储位置
- 堆栈--程序的存储分配
- java对象的内存分配编辑与寄存器 、堆栈、堆、静态存储等
- 变量存储位置和堆栈的区别
- (重要!)java中数据的5种存储位置(堆与栈) 成员变量局部变量内存分配
- Java 对象的存储位置
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- Java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java 内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java 内存分配及变量存储位置的区别
- css3 翻书动画
- iOS弹幕——HJDanmaku 2.0发布
- Ubuntu 动态库
- SecureCRT远程连接非root用户
- Java代码审查工具findbugs的使用总结
- 堆栈分配对象的成员存储位置
- FPGA的bank
- iframe.contentWindow 介绍
- kubernetes资源对象--deployment
- Warning: Permanently added the RSA host key for IP address '192.30.255.112' to the list of known hos
- java递归
- http工作原理实现
- Struts2(二)
- python-多线程