summaryrefslogtreecommitdiff
path: root/Runtime/Utilities/DynamicArray.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-10-28 19:27:57 +0800
committerchai <chaifix@163.com>2021-10-28 19:27:57 +0800
commit720e718186e6ec0e76bc08a9cedf9f08afc5e904 (patch)
tree420a4d4801dec1933eed9b62a8829974a4a24b77 /Runtime/Utilities/DynamicArray.h
parent74c5bd68a9110139aae8ca51067459da909fb10e (diff)
*misc
Diffstat (limited to 'Runtime/Utilities/DynamicArray.h')
-rw-r--r--Runtime/Utilities/DynamicArray.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/Runtime/Utilities/DynamicArray.h b/Runtime/Utilities/DynamicArray.h
index e69de29..16680bc 100644
--- a/Runtime/Utilities/DynamicArray.h
+++ b/Runtime/Utilities/DynamicArray.h
@@ -0,0 +1,34 @@
+#pragma once
+
+enum { kDynamicArrayThreshold = 64 };
+
+// 阈值之内在栈上保存,超过阈值在堆上保存,并自动释放
+template<typename T>
+class DynamicArray
+{
+public:
+ DynamicArray(int capacity)
+ {
+ if (capacity * sizeof(T) > kDynamicArrayThreshold)
+ {
+ m_Data = malloc(capacity * sizeof(T));
+ }
+ else
+ {
+ m_Data = alloca(capacity * sizeof(T));
+ }
+ }
+ ~DynamicArray()
+ {
+ delete[] m_Data;
+ }
+
+private:
+ void* operator new(std::size_t);
+
+ T* m_Data;
+
+};
+
+//https://www.jianshu.com/p/7737dab9c32b
+//https://blog.csdn.net/WUDAIJUN/article/details/9273339 \ No newline at end of file