直接写不行, 定义一个临时变量就可以了, 是什么情况

ma100 2015-01-09 11:44:52
在一段代码中

{
__int64 data;
... ;

fun ( data ); //作为参数传入

函数执行失败

改为
__int64 data;
... ;
__int64 t = data;

fun ( t ); //执行成功
}


这种情况是不是栈空间不够用了?
(在pc上成功, 在arm上失败的)
...全文
298 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-06-11
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
intel CPU在宽变量未Align时,仍可以操作,只是效率略低。 arm CPU在宽变量未Align时,报错。
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 《The Intel 64 and IA-32 Architectures Software Developer's Manual》 对应这个手册arm也有类似手册。 CPU特性是计算机软件的重要基础知识之一。
baidu_25273781 2015-01-12
  • 打赏
  • 举报
回复
格式一定呀正确
N0bug 2015-01-12
  • 打赏
  • 举报
回复
对齐的问题...
lucifer886 2015-01-12
  • 打赏
  • 举报
回复
引用 11 楼 ma100 的回复:
 
#include <iostream>
  
using namespace std;
#define __int64 long long
#pragma pack (  1 )
struct A_STRUCT // 
{ 
	bool bOffsetON[6];
	__int64 StartF[6];
}x;
 
template <typename T >
T CalculGP ( const T &x1  )
{
	 return x1; 
}

int main()
{
	x.StartF[0] = 100;
	 
	cout << CalculGP ( x.StartF[0] ) << endl; //输出1677721600

	return 0;
}

	

我只是觉得有点奇怪 pack(1)了后面不用pack()取消掉后面的字节对齐状态。 另外你确定你模板没写<x>会编译通过么……我觉得一般来说编译器不会出这种错误吧……
ma100 2015-01-10
  • 打赏
  • 举报
回复
arm编译器, 应该是字节对齐错了 把 template <typename T > T CalculGP ( const T &x1 ) { return x1; } 改为普通函数也错 ------------------------------------------------------------------ 这属于编译器的缺陷还是arm的缺陷还是程序的呢?
ri_aje 2015-01-10
  • 打赏
  • 举报
回复
引用 11 楼 ma100 的回复:
 
#include <iostream>
  
using namespace std;
#define __int64 long long
#pragma pack (  1 )
struct A_STRUCT // 
{ 
	bool bOffsetON[6];
	__int64 StartF[6];
}x;
 
template <typename T >
T CalculGP ( const T &x1  )
{
	 return x1; 
}

int main()
{
	x.StartF[0] = 100;
	 
	cout << CalculGP ( x.StartF[0] ) << endl; //输出1677721600

	return 0;
}

	

啥编译器啊,这么牛叉?我试了几个都是输出的 100。
ri_aje 2015-01-09
  • 打赏
  • 举报
回复
把代码上全了,中间的 ... 都干啥了。
mujiok2003 2015-01-09
  • 打赏
  • 举报
回复
引用 7 楼 ma100 的回复:
[quote=引用 5 楼 mujiok2003 的回复:] 在call之前data的值是否一致?
怎么看是否一致? 有初始化和赋值, ...省略了[/quote] 调试或加log
ma100 2015-01-09
  • 打赏
  • 举报
回复
引用 5 楼 mujiok2003 的回复:
在call之前data的值是否一致?
怎么看是否一致? 有初始化和赋值, ...省略了
zmszsh 2015-01-09
  • 打赏
  • 举报
回复
上告警信息吧!
mujiok2003 2015-01-09
  • 打赏
  • 举报
回复
在call之前data的值是否一致?
图灵狗 2015-01-09
  • 打赏
  • 举报
回复
1、调试看看具体是什么问题 2、把data换成全局变量试试看
引用 楼主 ma100 的回复:
在一段代码中

{
__int64 data;
... ;

fun (  data ); //作为参数传入

函数执行失败

改为
__int64 data;
... ;
__int64 t = data;

fun (  t ); //执行成功
}
这种情况是不是栈空间不够用了? (在pc上成功, 在arm上失败的)
mujiok2003 2015-01-09
  • 打赏
  • 举报
回复
“函数执行失败”是几个意思?
pengzhixi 2015-01-09
  • 打赏
  • 举报
回复
看不出栈不够用。
FightForProgrammer 2015-01-09
  • 打赏
  • 举报
回复
data没有初始化。。pc上编译器和arm处理未初始化的变量机制不同吧
  • 打赏
  • 举报
回复
应该是Data为初始化
ma100 2015-01-09
  • 打赏
  • 举报
回复
 
#include <iostream>
  
using namespace std;
#define __int64 long long
#pragma pack (  1 )
struct A_STRUCT // 
{ 
	bool bOffsetON[6];
	__int64 StartF[6];
}x;
 
template <typename T >
T CalculGP ( const T &x1  )
{
	 return x1; 
}

int main()
{
	x.StartF[0] = 100;
	 
	cout << CalculGP ( x.StartF[0] ) << endl; //输出1677721600

	return 0;
}

	

赵4老师 2015-01-09
  • 打赏
  • 举报
回复
intel CPU在宽变量未Align时,仍可以操作,只是效率略低。 arm CPU在宽变量未Align时,报错。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧