问题描述
在我的OS中long long int是:8个字节。 int是4个字节。
int *p = malloc(4);
此代码为堆上的整型变量分配4个字节。
int *p = malloc(8);
我如何分配8个字节长的整数? 我如何分配一个包含2个项目的数组?
解决方法
malloc()
仅分配原始内存,是将其视为数组还是单个变量,这取决于调用者中内存的使用方式。
int *p = malloc(2 * sizeof(int));
将内存作为2 int
的数组进行处理。然后,您可以这样做:
p[0] = 1;
p[1] = 2;
它将向内存中写入两个int
。
long int *p = malloc(sizeof(long int));
将内存作为单个long int
(或等效地为1 long int
的数组)进行处理。然后,您可以这样做:
*p = 12345678;
它将把那个长整数写入内存。
在int
为4字节和long int
为8字节的系统上,它们两个都将分配8个字节的内存。
如果要使用8个字节的整数,则称为const val RC_SIGN_IN = 0
class MainActivity : AppCompatActivity() {
lateinit var observer:StartActivityForResults
private lateinit var mGoogleSignInClient:GoogleSignInClient
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
observer = StartActivityForResults(activityResultRegistry)
lifecycle.addObserver(observer)
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build()
mGoogleSignInClient = GoogleSignIn.getClient(this,gso);
sign_in_button.setOnClickListener{
signIn()
}
}
private fun signIn() {
val signInIntent = mGoogleSignInClient.signInIntent
startActivityForResult(signInIntent,RC_SIGN_IN)
}
override fun onActivityResult(requestCode: Int,resultCode: Int,data: Intent?) {
super.onActivityResult(requestCode,resultCode,data)
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
// The Task returned from this call is always completed,no need to attach
// a listener.
val task = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
task?.isSuccess
Toast.makeText(this,"Success",Toast.LENGTH_LONG).show()
}
else{
Log.i("title","OKCODE ${Activity.RESULT_OK} RESULTCODE ${resultCode}")
}
}
}
或int64_t
/ int64_t
:
如果这是关于C的,则使用long long
:
malloc
如果这是关于C ++的,则使用int64_t* p = malloc(sizeof(int64_t));
:
new
使用原始代码,您将分配任意大小的映射到固定大小类型的指针,其中int64_t* p = new int64_t;
通常为4个字节,换句话说,您有足够的空间来容纳int
。
注意:出于可移植性的考虑,始终最好用基本类型而不是抽象数字来表达您的分配。
int[2]
可能会为2 xmalloc(8)
分配内存,也可能不会,这取决于int
是什么。sizeof(int)
始终可以正常工作。