小编Arp*_*pit的帖子

为什么在堆栈中为局部变量分配的内存多于C++中所需的内存?

我正在阅读缓冲区溢出.我发现有关堆栈上局部变量的内存分配的一个奇怪的事情

int f1 ()
{
    char string1[12];
    char string2[4];
}
Run Code Online (Sandbox Code Playgroud)

这里分配发生在堆栈上.

现在,在GCC中, string2被分配了4个字节,但是如果我声明除了2的幂(最多16个)之外,则由编译器分配16个字节.这意味着如果我在3,5,6,7,....,15个字节中分配string2,那么它由编译器分配16个字节,但如果我分配2的幂,如1,2,4,8 ......然后它被分配完全相同的大小.如果我分配超过16个字节(不是2的幂),那么它分配32个字节(我估计高达32个字节).

而在Visual Studio中,如果我分配1个字节,则分配9个字节,如果从2-4个字节分配,则分配12个字节,如果从5-8个字节开始,则编译器分配16个字节.

任何人都知道为什么这样的任务???

Atleast在Visual Studio中,如果有缓冲区溢出,我会收到调试错误,但在gcc中没有任何反应.GCC仅在发生过大的溢出时才提供分段故障.

c c++ memory gcc memory-management

6
推荐指数
2
解决办法
1369
查看次数

在64位Linux系统上,breakpad 32位构建失败

我试图在64位Linux系统上构建32位breakpad但我得到了构建错误.我按照此处的说明完成了以下操作.

./configure CXXFLAGS = -m32 CFLAGS = -m32 CPPFLAGS = -m32

使

在make中,我收到以下错误:

src/common/stabs_reader.cc:在成员函数'bool google_breakpad :: StabsReader :: Process()'中:

src/common/stabs_reader.cc:98:35:错误:未在此范围内声明'N_UNDF'

 } else if (iterator_->type == N_UNDF && unitized_) {
                               ^
Run Code Online (Sandbox Code Playgroud)

Makefile:4678:目标'src/common/stabs_reader.o'的配方失败了

make:***[src/common/stabs_reader.o]错误1

然后我查看./configure输出,看到它可能是a.out.h因为以下输出的问题:

检查a.out.h可用性......没有

检查a.out.h存在...没有

检查a.out.h ...没有

其他人都面临这个问题?我错过了什么吗?

linux x86-64 google-breakpad

2
推荐指数
1
解决办法
867
查看次数

标签 统计

c ×1

c++ ×1

gcc ×1

google-breakpad ×1

linux ×1

memory ×1

memory-management ×1

x86-64 ×1