这个问题可能听起来相当简单,但这是我与另一位与我合作的开发人员的辩论.
我正在小心处理堆栈分配的东西,而不是堆分配它们.他正在跟我说话,看着我的肩膀并评论说这没有必要,因为他们的表现是明智的.
我一直认为堆栈的增长是恒定的时间,并且堆分配的性能取决于堆的当前复杂性(用于找到合适大小的孔)和解除分配(折叠孔以减少碎片,如如果我没有弄错的话,许多标准库实现在删除期间需要时间来完成此操作.
这让我觉得可能非常依赖于编译器.特别是对于这个项目,我使用Metrowerks编译器来实现PPC架构.对这种组合的洞察力将是最有帮助的,但总的来说,对于GCC和MSVC++,情况如何?堆分配不如堆栈分配高吗?没有区别吗?或者差异是如此微小,它变得毫无意义的微优化.
我正在用C++创建一个宏来声明一个变量并为它赋值.根据宏的使用方式,宏的第二次出现可以覆盖第一个变量的值.例如:
#define MY_MACRO int my_variable_[random-number-here] = getCurrentTime();
使用它的另一个动机是避免为变量选择某个名称,以使其与开发人员最终使用宏选择的名称相同.
有没有办法在C++中的宏内生成随机变量名?
- 编辑 -
我的意思是独特但也是随机的,一旦我可以在一个块中使用我的宏两次,在这种情况下,它将生成如下:
int unique_variable_name;
...
int unique_variable_name;
在这种情况下,为了唯一,必须随机生成两个变量名.
我希望程序跳转到内存中的特定地址并继续从该地址执行.我考虑过使用,goto但我没有标签而只是内存中的地址.
无需担心从跳转地址返回.
编辑:使用GCC编译器
首先,我不确定这应该是我昨天在汇编和堆栈上开始的线程的一部分,但我认为我在这里问的问题是完全不同的.
我一直试图通过维基百科和谷歌了解Cygwin到底是什么,我运气不错.我刚刚开始使用gcc气体汇编程序在Linux上进行汇编编程.我正在午餐时使用一台机器,上面只有Windows.我想在这里练习一些汇编语言编程,所以我认为Cygwin可以提供帮助.
我错误地认为我在Linux中编写的代码可以使用Cygwin在Windows中编译和运行.Cygwin允许我编译代码:
as someAssmProg.as -o someAssmProg.o
ld someAssmProg.o -o someAssmProg
但是,如果我尝试在Cygwin下运行代码,
./someAssmProg
我收到"未处理的win32异常发生"消息
现在我假设这是因为我写的代码是针对Linux的.我想虽然Cygwin会处理这件事.Cygwin是否真的用于以Unix风格的命令行方式开发Windows应用程序?
我再次知道这对大多数人来说可能是显而易见的,但我真的很困惑!
PS我之前尝试过AndLinux用于Windows,但这是一个非常大的安装.
有一个问题让我很困惑.
int main(int argc, char *argv[])
{
    int i = 12345678;
    return 0;
}
int main(int argc, char *argv[])
{
    int i = 0;
    return 0;
}

程序总共具有相同的字节.为什么?
那个字面值确实存储在哪里?文字段或其他地方?

我对装配很新,现在我想了解它的cmp工作原理.以下是wiki中的内容:
cmp arg2, arg1
在arg1和arg2之间执行比较操作.通过从arg1中减去arg2的(带符号)来执行比较,其结果可以称为Temp.然后丢弃温度.
什么意思"然后丢弃温度"?它存放在哪里?如何访问此比较结果?有人可以解释一下吗?
我正在编写一个简单的宏来显示TRACE信息.
这就是我正在使用的,
#ifdef __DEBUG__
#define TRACE  { PrintErrorMsg("Trace exception at " __FILE__  "LineNo:"##(__LINE__) "Function: " __FUNCTION__ " " );}
#else 
#define TRACE 
#endif
这与FILE一起使用,但它似乎不适用于LINE,任何想法我怎么能处理这个.我已经尝试过使用字符串操作符.这是如下所示.
#ifdef __DEBUG__
#define TRACE  { PrintErrorMsg("Trace exception at " __FILE__  "LineNo:"#(__LINE__) "Function: " __FUNCTION__ " " );}
#else 
#define TRACE 
#endif
没有parms和双parms,前 - __LINE__或((__LINE__))
任何想法我怎么能处理这个问题?
我想出来了,
#ifdef __DEBUG__
#define ERROR_MSG_BUF_SIZE 1024
#define TRACE  { char * error_msg_buffer = new char[ERROR_MSG_BUF_SIZE]; \
                 sprintf(error_msg_buffer,"Trace Exception at file: %s ,Line : %d , …这一直困扰着我很长一段时间:让我说我有一个功能:
void test(){
    int t1, t2, t3;
    int t4 = 0;
    int bigvar[10000];
    // do something
}
计算机如何处理变量的内存分配?
我一直认为变量空间保存在计算机将读取的.exe中,这是正确的吗?但据我所知,该bigvar数组不会占用int.exe中的10000个元素空间,因为它未初始化.那么当我调用函数时,它的内存分配如何工作?
我正在检查 Ericksons Hacking: The Art of Exploitation 中的这段代码片段:
\nvoid test_function(int a, int b, int c, int d) {\n        int flag;\n        char buffer[10];\n        flag = 31337;\n        buffer[0] = \'A\';\n}\n\nint main() {\n        test_function(1, 2, 3, 4); \n}\nvoid test_function(int a, int b, int c, int d) {\n        int flag;\n        char buffer[10];\n        flag = 31337;\n        buffer[0] = \'A\';\n}\n\nint main() {\n        test_function(1, 2, 3, 4); \n}\n我在 main 和 test_function 处设置了断点。\n当中断 main 时,我得到以下输出:
\ngcc -g stack_example.c\n\ngdb -q ./a.out\n\ngef\xe2\x9e\xa4list main\n\n\n     0x555555555192 …我正在编写一个小程序,用 printf("\219") 打印一个多边形,看看我正在做的事情是否适合我的内核。但它需要调用很多函数,我不知道x86处理器是否可以接受那么多子例程,而且我在google中找不到结果。所以我的问题是它是否会接受这么多函数调用以及最大值是多少。(我的意思是这样的:-)
function a() {b();}
function b() {c();}
function c() {d();}
...
我已经使用了 5 个这样的级别(你知道我的意思,对吧?)