如何解决c - 如何在C中的堆栈中分配超过所需的内存?
例如。
let bytes =
match pdfImage.TryGetPng() with
| true,bytes -> bytes
| _ -> Seq.toArray pdfImage.RawBytes
use stream = new MemoryStream(bytes)
use image = Image.FromStream(stream)
int x;
分配了 4 个字节的内存。我想要的是为 x
分配超过 4 个字节,例如。 8. 对于整数,我可以轻松地使用 x
但结构体呢?
long long int
我可以添加一个 struct Es {
int a;
int b;
}
,但我想指定分配时要分配的内存量。例如。
char useless[<Extra memory>]
我说的是实际分配,而不是堆栈对齐。
它必须是堆栈,并且必须在分配时指定。
解决方法
为结构过度分配内存的一种方法是使用 alignas 宏。下面是一个例子:
#include <stdalign.h>
struct Foo { int l; };
void z(struct Foo );
void y(int );
void foo() {
alignas (512) struct Foo f;
int k = 20;
z(f);
y(k);
}
您可以将该代码放入在线编译器并检查生成的 ASM 以确认 F
被过度分配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。