记忆问题和功能

时间:2013-08-12 19:13:36

标签: c memory stack malloc heap

希望你们都度过了一个美好的夏天!

我目前正在修改考试,并在过去的论文中提出了几个问题我会坚持,并感谢您提供的任何帮助/解释! :)

以下是问题;

1。)函数power()应该实现函数n* 2^pprintf()行的输出应该是5*(2^2) = 20)。使用shift运算符完成函数power()的主体。 为什么使用移位运算符而不是math.h中的可用幂函数?

是明智的
#include <stdio.h>

int power(int n, int p) {
    << YOUR CODE GOES HERE >>
}

main () {
    printf("%d*(2^%d) = %d\n",5,2,power(5,2));
}

2。)内存被组织在称为Text,Data,Stack和Heap的区域中。下面的程序定义了变量abc。每个变量的内容驻留在哪个内存区域?

#include <stdio.h>
#include <stdlib.h>

int a = 5;

int func1(int x) {
    int b=5;
}

main {
    char * c;

    c = (char*) malloc (a+1);
    func1(a);
    return 0;
}

我还有几个问题要问,但会看看这些问题是怎样的!我之前从未使用过stackoverflow,所以如果我做错了什么就请放心!

非常感谢,

3 个答案:

答案 0 :(得分:1)

1 -

因为问题要求你展示如何使用移位操作员来操作我们的电源;不表明你知道如何使用c运行库。

2

a - data
b - stack
c - stack
他可能想要c-heap但事实并非如此。 c的内容在堆栈上

答案 1 :(得分:1)

首先,我会让你编写自己的代码,这是最好的学习方法。但是,我会回答这些问题背后的理论......

1)当将数字2提高到第n个幂时,与将2自身相乘n次相同。但乘以2与加倍数相同,计算机将它们的数字存储在基数2中。例如,6 == 0b00110的二进制值,但是当所有位向左移动1时,则12 == 0b01100 ,与6 * 2相同。因此,例如,16 == 4 ^ 2 = 4 * 4 = 4 *(2 * 2)或二进制16 == 0b010000 == 0b001000 * 2 =(0b00100)* 2 * 2.

2)当变量在所有例程之外声明时,它处于“全局”存储中,也可能称为“数据”。当在例程中声明变量时,它是一个“自动”变量(意味着它是自动的)并在堆栈上分配。当显式分配变量时,使用malloc作为一个示例,然后在堆上分配它。

在C中,指针有两个数据组件或存储元素。首先,指针本身通常只使用4个字节。然后为数据分配任何长度的数据。要说更多其他内容,请重复其他答案提供的信息!

free在堆上分配的所有存储都是一种很好的编程习惯。虽然系统应在main退出时释放该存储,但并不总能保证,特别是在小型或嵌入式系统上。因此,代码示例应该结束为:

    free(c);
    return 0;

答案 2 :(得分:0)

1&GT;

#include <stdio.h>


int power(int n, int p) 

{

return n<<p; // p is the number of bits left-shifted
}

main () 

{
printf("%d*(2^%d) = %d\n",5,2,power(5,2));
}

2 - ;

a:数据 b:堆栈 c:堆栈