コンテナクラスのメモリはスタックorヒープ?
Posted: 2018年2月18日(日) 01:45
初めまして。コンテナクラスのメモリの仕様についての質問です。
arrayやvector等のコンテナクラスで使用するメモリは、ヒープ領域に確保されるのでしょうか?
よろしくお願いします。
arrayやvector等のコンテナクラスで使用するメモリは、ヒープ領域に確保されるのでしょうか?
よろしくお願いします。
#include <iostream>
#include <vector>
using namespace std;
int *ptr;
struct FakeAllocator {
typedef int value_type;
template <class U> struct rebind { typedef FakeAllocator other; };
int* allocate(size_t n) { return ptr; }
void deallocate(int* p, size_t n) { }
};
int main()
{
int buf[1024];
ptr = buf;
vector<int, FakeAllocator> a(5);
cout << " buf = " << buf << endl;
cout << "&a[0] = " << &a[0] << endl;
for (int i = 0; i < 5; i++) a[i] = i + 1;
for (int i = 0; i < 5; i++) cout << ' ' << a[i];
cout << endl;
}
#include <iostream>
#include <vector>
using namespace std;
struct FakeAllocator {
typedef int value_type;
template <class U> struct rebind { typedef FakeAllocator other; };
int* allocate(size_t n) {
ptr += n;
cout << "allocate: ptr = " << ptr << endl;
return ptr - n;
}
void deallocate(int* p, size_t n) {
if (p + n == ptr) ptr -= n;
cout << "deallocate: ptr = " << ptr << endl;
}
static void set(int *p) {
ptr = p;
cout << "set: ptr = " << ptr << endl;
}
static int* ptr;
};
int* FakeAllocator::ptr;
int main()
{
int buf[1024];
FakeAllocator::set(buf);
vector<int, FakeAllocator> a(3);
vector<int, FakeAllocator> b(5);
vector<int, FakeAllocator> c(4);
cout << " buf = " << buf << endl;
cout << "&a[0] = " << &a[0] << endl;
cout << "&b[0] = " << &b[0] << endl;
cout << "&c[0] = " << &c[0] << endl;
}
set: ptr = 0xffffbbc0
allocate: ptr = 0xffffbbcc
allocate: ptr = 0xffffbbe0
allocate: ptr = 0xffffbbf0
buf = 0xffffbbc0
&a[0] = 0xffffbbc0
&b[0] = 0xffffbbcc
&c[0] = 0xffffbbe0
deallocate: ptr = 0xffffbbe0
deallocate: ptr = 0xffffbbcc
deallocate: ptr = 0xffffbbc0