我对GCC生成的汇编代码有疑问(-S选项).因为,我是汇编语言的新手并且对它知之甚少,这个问题将是非常原始的.不过,我希望有人会回答:
假设,我有这个C代码:
main(){
int x = 15;
int y = 6;
int z = x - y;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我们查看汇编代码(特别是对应于int z = x - y的部分),我们会看到:
主要:
...
subl $16, %esp
movl $15, -4(%ebp)
movl $6, -8(%ebp)
movl -8(%ebp), %eax
movl -4(%ebp), %edx
movl %edx, %ecx
subl %eax, %ecx
movl %ecx, %eax
movl %eax, -12(%ebp)
...
Run Code Online (Sandbox Code Playgroud)
为什么GCC不能生成类似这样的东西,这样可以减少复制内容.
主要:
...
movl $15, -4(%ebp)
movl $6, -8(%ebp)
movl -8(%ebp), %edx
movl -4(%ebp), %eax
subl %edx, %eax
movl %eax, -12(%ebp)
...
Run Code Online (Sandbox Code Playgroud)
PS
Linux …
语言是Java.鉴于这种:
public static void main(String[] args) {
Boolean b1 = true;
Boolean b2 = true;
int i1 = 1;
if (b1 = true) //line 5
if (b1 == true} // line 6
Run Code Online (Sandbox Code Playgroud)
我理解这b1 == true是一个等效测试,它会给出结果:true或false.然而,b1 = true对于我的理解是一个声明,除了在这种情况下,它应该只返回:b1 = true返回true,与==test 完全相同?
你能解释一下原因吗?谢谢!
我遇到过类似的代码
if (flagsDef)
flagsTainted |= flagsUsed;
Run Code Online (Sandbox Code Playgroud)
请协助了解所用操作员的含义.
我试图用SSE内在函数编写if语句的等价物.
我__m128 _mm_cmplt_ps(__m128 a, __m128 b)用来做比较a <b,这会返回0xffffffff或者0x0如果比较分别为true或false.我想将这些值转换为1和0.为了做到这一点,实现逻辑"和"是正确的,转换的结果__m128 _mm_and_ps(__m128 c , __m128 d)在哪里,例如,?cd0xffffffff
感谢您的关注.
如果我有一个AVX寄存器,其中有4个双打,并且我想将其反向存储在另一个寄存器中,是否可以使用单个内部命令执行此操作?
例如:如果我在SSE寄存器中有4个浮点数,我可以使用:
_mm_shuffle_ps(A,A,_MM_SHUFFLE(0,1,2,3));
Run Code Online (Sandbox Code Playgroud)
我可以使用_mm256_permute2f128_pd()吗?我不认为你可以用上面的内在来解决每个人的双重问题.
这是我的代码,我需要澄清此代码的输出:
#include <stdio.h>
int main(void )
{
char name1[10] = "Rajan" , name2[10] = "Rajan" ;
char *name3 = "Chennai" , *name4 = "Chennai" ;
printf("\nAddress for name1 and name2 : %p and %p",name1,name2) ;
printf("\nAddress for name3 and name4 : %p and %p",name3,name4) ;
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
这段代码的输出是
Address for name1 and name2 : 0x7fff9e6cbe10 and 0x7fff9e6cbe20
Address for name3 and name4 : 0x400760 and 0x400760
Run Code Online (Sandbox Code Playgroud)
这里的值的地址name1和name2是不同的,因为我分配了两个不同的阵列.但在的情况下name3和name4,地址是相同的,为什么不一样?它不会创建不同的内存并为值分配名称Chennai?为什么它指向相同的内存?
有这些数据
.data
tableD DWORD 10h, 20h, 30h, 40h, 50h, 60h
Rowsize = ($ - tableD)
DWORD 60h,70h,80h,90h,0A0h
DWORD 0B0h,0C0h,0D0h,0E0h,0F0h
Run Code Online (Sandbox Code Playgroud)
我可以用
.code
mov eax,tableD[ebx + esi*TYPE tableD]
Run Code Online (Sandbox Code Playgroud)
但我不能用
mov eax,tableD[ebx*2 + esi*TYPE tableD]
Run Code Online (Sandbox Code Playgroud)
但我可以用
mov eax,tableD[ebx*2 + esi]
Run Code Online (Sandbox Code Playgroud)
我不能在那里使用2*s?
我可以知道这些物品的条款吗?
我正在实现一个Matrix类,我重载了*和+运算符.我也有一个构造函数:
Matrix (int row, int col, const elemType &init_val)
Run Code Online (Sandbox Code Playgroud)
构造一个初始化的矩阵,在所有位置保存init_val.所以基于这个实现,我有我的测试程序:
Matrix<int> mi4 = Matrix<int> (2, 2, 3) + Matrix<int> (2, 2, 1);
Run Code Online (Sandbox Code Playgroud)
编译器给我以下错误:
testMatrix.cpp:41: error: ambiguous overload for ‘operator+’ in ‘Matrix<int>(2, 2, ((const int&)((const int*)(&3)))) + Matrix<int>(2, 2, ((const int&)((const int*)(&1))))’
Matrix.h:91: note: candidates are: Matrix<elemType> operator+(const Matrix<elemType>&, const Matrix<elemType>&) [with elemType = int]
Run Code Online (Sandbox Code Playgroud)
我记得在C++标准库中,你可以在表达式中调用构造函数.我该如何实现呢?非常感谢!
我对C相对较新.在Kochan的"C语言编程"中,我目前正在使用if-else语句.我正在尝试编写一个基本的tic-tac-toe游戏,但我遇到了一些困难.一旦玩家放置了x或o,我不确定如何保存棋盘.这是我到目前为止的代码:
#include <stdio.h>
int main (void)
{
int board = "_|_|_\n
_|_|_\n
| | \n";
int player1, player2;
printf ("Print %i", board)
printf("Player 1, it's your move:")
scanf("%i", player1)
if(player1 == "upLeft")
printf("x|_|_\n
_|_|_\n
_|_|_\n
etc.
Run Code Online (Sandbox Code Playgroud)
我还是太初学者才能实现这个功能吗?
我有一个具有以下结构的代码.
#pragma omp parallel for
for( i = 0; i < N; i++ )
{
.....
index = get_index(...);
array[index] = ...;
.....
}
Run Code Online (Sandbox Code Playgroud)
现在index每个线程的值都是唯一的(它永远不会为不同的线程重叠),但是当然OpenMP无法猜测这个,我想是使用同步对象来访问array.
我怎么能要求openmp不要使用同步对象,array并依赖我,这个index值对于不同的线程是唯一的.我试图放入array私人列表,但是因此出现了分段错误.